本サイトからスピンオフした姉妹サイトです。マーカー選択時の処理や、吹き出し表示、吹き出しタップ時の処理の、基本的な実装方法を説明する。前回に引き続き、Xamarin.iOSでMapKitを使用する。今回はマーカーや吹き出しを表示する方法を解説する。「Tips:Xamarin.iOSで地図に図形を表示するには?(MapKit使用)」の続きとして解説するので、プロジェクトの準備は前回を参照してほしい。画面を準備する前回終了時点で、MainStoryboard.storyboardファイルを開くと、以下の画面のようになっているはずだ。前回終了時のMainStoryboardこれに「マーカーを追加」「マーカーを削除」するためのボタンをそれぞれ追加する(図2)。[Name]は、それぞれbuttonAddMarker、buttonDeleteMarkerとする。Marker]ボタンとする。マーカーを追加するマーカーの描画は、MKMapViewDelegateプロトコルを実装したクラスを経由して行われる。そのため、以下のような、MKMapViewDelegateを継承したクラスMyMapViewDelegateを作成して実装する。Marker]ボタンを押した時にマーカーを追加するコードを、以下のように記述する。139.8107)};mapView.AddAnnotation(annotation);};}}マーカーを追加するコード(MapKitSampleViewController.cs)1で、先に作成したMyMapViewDelegateクラスのインスタンスを生成してMapViewに設定する。次に2で、ボタンを押した時に、MKPointAnnotationオブジェクトを生成して、MKMapViewに追加(=AddAnnotationメソッド)している。ここでは東京スカイツリーの位置を示している。次に、描画のためにマーカーが必要になると、3のGetViewForAnnotationメソッドが呼び出される。4で、PIN_IDを指定してDequeueReusableAnnotationメソッドを呼び出しているが、これはマーカーを都度生成せず、使い回すための仕組みだ。MKPinAnnotationView(...)によりマーカーのためのViewを生成し、色を赤に設定して返却する(5)。マーカーを削除する次に、追加したマーカーを削除する方法を解説する。Marker]ボタンを押した時にマーカーを削除するコードを、以下のように記述する。null;};}}マーカーを削除するコード(MapKitSampleViewController.cs)マーカーの削除は1で、MapViewオブジェクトのRemoveAnnotationメソッドを呼び出すだけだ。削除済みのannotationを渡してしまわないよう、事前にチェックしている。ここまでのプログラムを実行すると、図3のようになる。Marker]ボタンを押すと、東京スカイツリーの位置に赤色のマーカーが表示される。Marker]ボタンを押すと、マーカーが削除される。マーカーが選択された時に処理を行う続いて、マーカーをタップして選択した時に何らかの処理を行う方法を解説する。MyMapViewDelegate.csファイルに以下のようにコードを追加する。//<--2};alertView.Show();}}マーカータップ時にアラートを表示するコード(MyMapViewDelegate.cs)マーカーを選択すると、DidSelectAnnotationViewメソッドが呼び出されるので、このメソッドをオーバーライドする(1)。Studioのコード補完機能により、このメソッドを追加すると、以下のようなコメントが表示される。これが示す通り、base.DidSelectAnnotationView()を呼び出してはいけないことに注意してほしい。http://docs.xamarin.com/guides/ios/application_fundamentals/delegates,_protocols,_and_eventsDidSelectAnnotationViewオーバーライドメソッドを追加する際に表示されるコメント上記のDidSelectAnnotationViewメソッドの実装では、UIAlertView(=アラート)を表示している。ダイアログを閉じた時に、MapViewオブジェクトのDeselectAnnotationメソッドを呼び出して「選択を解除」することを忘れないでほしい(2)。選択状態のままだと、2回目のタップ時に、このメソッドは呼び出されない。ここまでのプログラムを実行すると、図4のようになる。プログラムの実行結果(マーカーを選択したとき)マーカーを選択すると、「マーカーが選択されました」と表示される。吹き出しを表示し、吹き出しが押された時に処理を行う最後に、マーカーの上に吹き出しを表示する方法、およびその吹き出しがタップされた時に処理を行う方法について解説する。MyMapViewDelegate.csファイルのコードを、以下のように変更する。alertView.Show();}}吹き出しを表示し、吹き出しが押された時にアラートを表示するコード(MyMapViewDelegate.cs)1で、MKPinAnnotationViewオブジェクトのCanShowCalloutプロパティをtrueにすることで、マーカーをタップした時に、その上に吹き出しが表示されるようになる。吹き出しに表示されるのは、MKPointAnnotationオブジェクトのTitleプロパティ値の文字列だ。pinView.RightCalloutAccessoryViewの行は、吹き出しの右端に表示するボタンの設定だ。2が、吹き出しをタップした時に呼び出されるメソッドだ。ここでは「吹き出しがタップされました」というUIAlertViewを表示している。吹き出しのタップでは通常、マーカーを選択解除する必要はないので、DeselectAnnotationメソッドを呼び出す必要はない。そこで3で、先ほど追加したマーカーの選択時の処理をコメントアウトしている。吹き出しを選択するために、マーカーの選択をする必要があるが、その際にアラートを表示するのはふさわしくないだろう。ちなみにDidSelectAnnotationViewメソッド自体は吹き出しがあっても呼び出されるので、何らかの処理を行うことは可能だ。ここまでのプログラムを実行すると、図5のようになる。プログラムの実行結果(吹き出しを表示、選択したとき)マーカーを選択すると吹き出しが表示され、吹き出しをタップすると「吹き出しがタップされました」と表示される。まとめ前々回、前回、そして今回で、Xamarin.iOSでのMapKitの基本的な使用方法を解説した。Xamarinを参照されたい。次回以降では、Xamarin.AndroidでGoogleマップを表示する方法を解説する予定だ。※以下では、本稿の前後を合わせて5回分(第17回~第21回)のみ表示しています。INDEX]を参照してください。Xamarin.iOSで地図を表示するには?(MapKit使用)Xamarin.iOSでiOS標準の地図ライブラリ「MapKit」を使って地図を表示する方法を解説。地図の種類の変更、ジェスチャの有効/無効の切り替えなども説明する。Xamarin.iOSで地図に図形を表示するには?(MapKit使用)Xamarin.iOSでiOS標準の地図ライブラリ「MapKit」を使って、ライン、ポリゴン、円などの図形を地図上に表示する方法を解説する。マーカー選択時の処理や、吹き出し表示、吹き出しタップ時の処理の、基本的な実装方法を説明する。v2」を使って、Xamarin.Androidで地図を表示する方法を解説。API利用環境の準備から、まずはGoogleマップを表示するまでの手順を説明する。v2」を使って、Xamarin.Androidアプリで地図の表示位置や種類を変更する方法、ジェスチャの有効/無効を切り替える方法などを説明する。機械学習エンジニアを目指す人~初中級者のための技術情報サイトです。「機械学習&AI」「クラウド&ビッグデータ」「IoTデバイス」のネット記事情報を共有中。開発者のためのSlackチーム、作りました:「機械学習&AI」「クラウド&ビッグデータ」「IoTデバイス」のネット記事情報を共有中。2020最適なビューへの切り替えを推奨します:スマートフォン用表示に。