HOME > MKAnnotationView

MKAnnotationView

MKAnnotationViewは、独自に作成したアノテーションを使用したい場合に用いるクラスです。
標準で用意されているピンで構わない場合は、MKPinAnnotationViewクラスが用意されているのでそちらを使用します。

MKAnnotationViewのクラス階層

NSObject

UIResponder

UIView

MKAnnotationView

生成


// 生成例
-(MKAnnotationView*)mapView:(MKMapView*)mapView
                                             viewForAnnotation:(id)annotation{

  static NSString *PinIdentifier = @"Pin";
  MKAnnotationView *av =
    (MKAnnotationView*)
      [mv dequeueReusableAnnotationViewWithIdentifier:PinIdentifier];
  if(av == nil){
    av = [[[MKAnnotationView alloc]
         initWithAnnotation:annotation reuseIdentifier:PinIdentifier] autorelease];
  }
  return av;

}

MKAnnotationViewの生成は、通常viewForAnnotationデリゲートメソッドの中で行います。
viewForAnnotaionデリゲートメソッドにはMKAnnotaionプロトコルを実装したアノテーションが引き渡されてきて、それを元にMKAnnotationViewのインスタンスを生成します。

生成時はメモリを節約するために一度生成したインスタンスは再利用するようにコーディングします。
(UITableViewCellでも同じ仕組みでメモリを節約しています)

MKAnnotationViewのプロパティ

【MKAnnotationViewの主要プロパティ】
プロパティ名/型 読専 説明
canShowCallout
BOOL
コールアウトを表示するしないの設定
 YES:コールアウトを使用する
 NO:コールアウトを使用しない(デフォルト)
(例)av.canShowCallout = YES;
image
UIImage
アノテーションの画像を指定する
(例)画像(hoge.png)を指定する;
av.image = [UIImage imageNamed:@"hoge.png"];
leftCalloutAccessoryView
UIView
コールアウトの左に表示するUIViewを指定する
(例)コールアウトの左にDetailDisclosureボタンを指定する;
UIButton *b =
 [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
av.leftCalloutAccessoryView = b;
rightCalloutAccessoryView
UIView
コールアウトの右に表示するUIViewを指定する
(例)コールアウトの右にDetailDisclosureボタンを指定する;
UIButton *b =
 [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
av.rightCalloutAccessoryView = b;

主要なプロパティのみ掲載しています。
 上記「MKAnnotationViewのクラス階層」にあるクラスのプロパティも使用できます。

MKAnnotationView例文


// MKMapViewのデリゲートを自分自身に設定する
mv.delegate = self;

// 経度緯度情報を作成(ここでは東京都庁の経度緯度を例としています)
CLLocationCoordinate2D co;
co.latitude = 35.68664111;  // 経度
co.longitude = 139.6948839;  // 緯度

// アノテーションを地図へ追加
HogeAnnotation *ha = [[[HogeAnnotation alloc] init] autorelease];
ha.coordinate = co;
ha.title = @"Hoge";
[mv addAnnotation:ha];

※HogeAnnotationはMKAnnotationプロトコルを実装した自作クラス。
 (HogeAnnotationクラスは、MKPinAnnotationViewページの一番下のサンプルを参照ください。)
※mvはMKMapViewインスタンス。


// アノテーションが表示される時に呼ばれる
-(MKAnnotationView*)mapView:(MKMapView*)mapView
                                  viewForAnnotation:(id)annotation{

  static NSString *PinIdentifier = @"Pin";
  MKAnnotationView *av =
    (MKAnnotationView*)
      [mv dequeueReusableAnnotationViewWithIdentifier:PinIdentifier];
  if(av == nil){
    av = [[[MKAnnotationView alloc]
        initWithAnnotation:annotation reuseIdentifier:PinIdentifier] autorelease];
    av.image = [UIImage imageNamed:@"hoge.png"];  // アノテーションの画像を指定する
    av.canShowCallout = YES;  // ピンタップ時にコールアウトを表示する
  }
  return av;

}