iPhoneアプリ開発の虎の巻
HOME > MKAnnotationView

MKAnnotationView

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

MKAnnotationViewのクラス階層

NSObjectUIResponderUIView ↑ MKAnnotationView

生成

// 生成例
-(MKAnnotationView*)mapView:(MKMapView*)mapView viewForAnnotation:(id<MKAnnotation>)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<MKAnnotation>)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;

}
totop