MKPinAnnotationView
MKPinAnnotationViewは、地図上に標準で用意されたアノテーションを使用する場合に使用するクラスです。
(アノテーションは地図上の位置を表示するためのアイコンです。マップアプリなどで位置を表す時によく見かけるピンがアノテーションのひとつです。)
独自に作成したアノテーションを使用する場合はMKAnnotationViewを使用します。
MKPinAnnotationViewクラスはMKAnnotationViewクラスのサブクラスなので、MKAnnotationViewクラスのプロパティも使用することができます。
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のプロパティ
プロパティ名/型 | 読専 | 説明 |
---|---|---|
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