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

MKPinAnnotationView

MKPinAnnotationViewは、地図上に標準で用意されたアノテーションを使用する場合に使用するクラスです。
(アノテーションは地図上の位置を表示するためのアイコンです。マップアプリなどで位置を表す時によく見かけるピンがアノテーションのひとつです。)
独自に作成したアノテーションを使用する場合はMKAnnotationViewを使用します。

MKPinAnnotationViewクラスはMKAnnotationViewクラスのサブクラスなので、MKAnnotationViewクラスのプロパティも使用することができます。

ピンアノテーション(赤) ピンアノテーション(緑) ピンアノテーション(紫)

MKPinAnnotationViewのクラス階層

NSObjectUIResponderUIViewMKAnnotationView ↑ MKPinAnnotationView

生成

// 生成例
-(MKAnnotationView*)mapView:(MKMapView*)mapView viewForAnnotation:(id<MKAnnotation>)annotation{
  static NSString *PinIdentifier = @"Pin";
  MKPinAnnotationView *pav =
    (MKPinAnnotationView*)
      [mv dequeueReusableAnnotationViewWithIdentifier:PinIdentifier];
  if(pav == nil){
    pav = [[[MKPinAnnotationView alloc]
         initWithAnnotation:annotation reuseIdentifier:PinIdentifier] autorelease];
  }
  return pav;

}

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

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

MKPinAnnotationViewのプロパティ

【MKPinAnnotationViewの主要プロパティ】
プロパティ名/型 読専 説明
pinColor
(MKPinAnnotationColor)
ピンの色を指定する
 赤:MKPinAnnotationColorRed
 緑:MKPinAnnotationColorGreen
 紫:MKPinAnnotationColorPurple
※上の画像参照
(例)pav.animatesDrop = MKPinAnnotationColorRed;
animatesDrop
BOOL
ピンの表示方法を指定する
 YES:ピンが落ちてくるように表示する
 NO:アニメーションは無し
(例)pav.animatesDrop = YES;

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

MKPinAnnotationView例文

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

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

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

※HogeAnnotationはMKAnnotationプロトコルを実装した自作クラス。(一番下を参照)
※mvはMKMapViewインスタンス。

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

  static NSString *PinIdentifier = @"Pin";
  MKPinAnnotationView *pav =
    (MKPinAnnotationView*)
      [mv dequeueReusableAnnotationViewWithIdentifier:PinIdentifier];
  if(pav == nil){
    pav = [[[MKPinAnnotationView alloc]
        initWithAnnotation:annotation reuseIdentifier:PinIdentifier] autorelease];
    pav.animatesDrop = YES;  // アニメーションをする
    pav.pinColor = MKPinAnnotationColorPurple;  // ピンの色を紫にする
    pav.canShowCallout = YES;  // ピンタップ時にコールアウトを表示する
  }
  return pav;

}

上のサンプルで使用しているHogeAnnotationの例

// HogeAnnotation.h
#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>

@interface HogeAnnotation : NSObject <MKAnnotation>{
    
    CLLocationCoordinate2D coordinate;
    NSString *title;
    
}

@property(nonatomic)CLLocationCoordinate2D coordinate;
@property(nonatomic, copy) NSString *title;

-(id)initWithCoordinate:(CLLocationCoordinate2D)co;

@end
// HogeAnnotation.m
#import "HogeAnnotation.h"

@implementation HogeAnnotation

@synthesize coordinate;
@synthesize title;

-(id)initWithCoordinate:(CLLocationCoordinate2D)co{
    coordinate = co;
    return self;
}

@end
totop