4

画像1 画像はこちら

iPhone アプリで MKMapview を使用しています。

MKMapkit フレームワークの注釈に値を割り当てるにはどうすればよいですか?

4

2 に答える 2

6
  1. カスタム注釈クラスを作成します ( MKAnnotation)
  2. カスタム AnnotationView クラスを作成します ( MKAnnotationView)

AnnotationViewクラス内のカスタム注釈のタイトル、背景画像、およびその他の要素をプロパティとして定義してください。

  1. AnnotationView次のメソッドをオーバーライドし、クラスで定義したプロパティの値を設定します。

    - (MKAnnotationView*) mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation{
    
    if ([<Object of CustomAnnotation class> isKindOfClass:[MKUserLocation class]])
        return nil;
    
    CustomAnnotation* custom_anno = (CustomAnnotation*)[mapView dequeueReusableAnnotationViewWithIdentifier:@"custom_annotation"];
    
    if (!custom_anno){
    custom_anno = [[CustomAnnotation alloc] initWithAnnotation:annotation reuseIdentifier:@"custom_annotation"];
    custom_anno.frame = CGRectMake(0, 0, 250, 57.5);
    
    custom_anno.canShowCallout = NO;//CHange if you want to change callout behaviour (thats is it's abilty to apper). I set it top no because i did not want a callout.
    
    UIImageView* icon = [[UIImageView alloc] initWithFrame:CGRectMake(5, 5, 40, 40)];
    [icon setImageWithURL:<your image> placeholderImage:<your placeholder image>];//placeholder image = nil if you do not want one.
    icon.backgroundColor = [UIColor lightGrayColor];
    
    UILabel* name = [[UILabel alloc] initWithFrame:CGRectMake(50, 5, 200, 20)];
    name.text = nameValue;
    
    UILabel* category = [[UILabel alloc] initWithFrame:CGRectMake(50, 25, 200, 20)];
    category.text = otherValue;
    
    [custom_anno addSubview:icon];
    [custom_anno addSubview:name];
    [custom_anno addSubview:category];
    }
    return custom_anno;
    }
    

    私のカスタム アノテーション クラスは「Annotation」で、カスタム アノテーション ビュー クラスは「CustomAnnotation」でした。必要に応じて変更してください。

Annotationこの後、クラスのオブジェクトを作成して使用します。

編集 :

カスタム アノテーション ビュー クラスで次のメソッドをオーバーライドしてください。

.h:

- (id)initWithAnnotation:(id<MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier;

.m:

- (id)initWithAnnotation:(id<MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier{
self = [super initWithAnnotation:annotation reuseIdentifier:reuseIdentifier];
if (self) {
}
return self;

}

編集2:

次のようにView Controllerで使用できます。

MKMapView* cellMap = [[MKMapView alloc] initWithFrame:CGRectMake(0, 0, 290, 100)];
cellMap.delegate = self;
cellMap.userInteractionEnabled = NO;

CLLocationCoordinate2D center = CLLocationCoordinate2DMake(<your coordinates>);
MKCoordinateSpan span = MKCoordinateSpanMake(0.04, 0.04);
MKCoordinateRegion region = MKCoordinateRegionMake(center, span);
cellMap.showsUserLocation = NO;
[cellMap setRegion:region animated:YES];

Annotation* anon = [[Annotation alloc] init];
anon.coordinate = center;

[cellMap addAnnotation:anon];
[checkIn addSubview:cellMap];
于 2013-08-27T06:34:40.987 に答える