iPhoneカスタム地図アプリを作る3つのポイント
iPhoneでカスタム地図アプリを作ろうと思ったら意外とはまったので
ポイントを紹介しておきます。
最初に今回実現したい技術的な要素はこんな感じです
- 任意の場所を指定
- ピンを立てる
- ピンアイコンをカスタイマイズ
- ピンに情報を表示させる
では実際のポイント
1) 基本(最低限必要なクラスの準備)
1つめのポイントはクラス設計
デリゲートやインタフェース実装クラスを使う必要があるので、
クラス設計をしてから実装することをお勧めします
(私は勢いで実装しようとして、はまりました)
アプリのViewControllerでCLLocationManagerとMKMapViewを利用
UIViewController
私の場合は上記の様にデリゲートしてViewControllerにメンバでCLLocationManagerのインスタンスを保持しました
MKMapViewはInterfaceBuilderでViewに追加した上で
インスタンスを保持してリンクします
アノテーション(MKAnnotation)を実装するクラスを利用
ユーザに指定された場所にフラグを立てて、情報を表示させるために
MKAnnotationを実装するクラスを用意します
実際にはこのクラスもViewControllerで必要に応じて
インスタンスを生成して利用します
@interface MyAnnotation : NSObject
位置情報やタイトルを保持するメンバ変数を設定しておくことが
必要です
2) iPhoneのタップイベントハンドリング実装
2つ目のポイントは
検出時にインスタンスを生成して、必要な情報を詰めこんでやります
具体的にはUITapGestureRecognizerのインスタンスを生成して
ハンドリングするイベント種別を設定(numberOfTapsRequired)
ビューにインスタンスを設定(mapView addGestureRecognizer)
このあたりを実装すれば、例えばダブルタップ検出時(numberOfTapsRequired=2)にフラグを設定する実装が可能になります
3) MKAnnotationの活用
3つ目のポイントは、ダブルタップ検出時にアノテーション情報を
うまく組み込んでやることで、画面に落ちるピン画像を変更したり
ピンをタップしたときの情報を設定することが可能になります
具体的にはMKMapViewとCLLocationManagerを使って、タップした
位置情報を取得。
CGPoint location = [sender locationInView:mapView];
CLLocationCoordinate2D mapPoint = [ mapView convertPoint:location toCoordinateFromView:mapView];
MKAAnnotationのインスタンスを生成し、
取得した位置情報や、ピンをタップしたときに表示させる情報の設定を行います
CLLocationCoordinate2D coordinate_;
coordinate_.latitude = [[pinProp objectForKey:@"latitude"] doubleValue];
coordinate_.longitude = [[pinProp objectForKey:@"longitude"] doubleValue];
annotation = [[MyAnnotation alloc] initWithPinProp:pinProp];
[mapView addAnnotation:annotation];
最後にアイコンの変更はピンの表示イベントハンドル
- (MKAnnotationView*)mapView:(MKMapView*)_mapView viewForAnnotation:()annotation{
で必要に応じてannotationView.imageで設定すると色々と遊べます(笑)
iPhoneのオモチャ箱 iPhone SDKプログラミング
- 作者: 徳井直生,岡村浩志,笠谷真也,深津貴之,青木太臣,大宮聡之,瀬尾浩二郎,バスケ,宮川義之
- 出版社/メーカー: ワークスコーポレーション
- 発売日: 2010/06/22
- メディア: 単行本
- 購入: 6人 クリック: 74回
- この商品を含むブログ (15件) を見る