web-dev-qa-db-ja.com

プログラムでMKAnnotationViewを開くにはどうすればよいですか? (iPhone、MapKit)

プログラムでMKPinAnnotationViewのコールアウトを開きたい。たとえば、地図上に10個のピンをドロップし、最も近いピンを開きたいとします。どうすればこれを行うことができますか?

AppleはMKAnnotationView'sに「selected」パラメータを指定しましたが、直接設定することはお勧めしません(これは機能しません。試してみました)。

残りの部分については、MKAnnotationViewにはsetHighlighted(同じストーリー)のみがあり、ShowCalloutメソッドを使用できます。

これが可能かどうかのヒントはありますか?

26
StijnSpijker

MapViewControllerで、アクションメソッドを作成します。

- (void)openAnnotation:(id)annotation 
{
    //mv is the mapView
    [mv selectAnnotation:annotation animated:YES];

}

次に、現在の場所に基づいて最も近い注釈を決定し、配列で使用可能な注釈をたどることができます。

[mv annotations];

最も近い注釈が計算されたら、次を呼び出します。

[self openAnnotation:closestAnnotation];

MapViewは自動的にスクロールして、注釈を表示領域の中央に配置します。

78
Chip Coons

Swift 3では、これは次のように更新されます。

func openAnnotation(annotation: MkAnnotation) {
_ = [mapView .selectAnnotation(annotation, animated: true)]
}

任意の注釈を使用して呼び出すことができます(これにより、注釈の吹き出しビューが開き、注釈をマップの中央に配置しようとします)

たとえば、仮想の注釈リストで2番目の注釈を使用します。

openAnnotation(annotation: mapView.annotations[1])
1
S. Doe