次のような状況があります: - 座標は同じだがタイトルと情報が異なる 3 つのピン - マップ上にはピンが 1 つしかない
そのピンを複数回タップすると、注釈が次のように表示されます。 - 最初のタップ -> ピン 1 の注釈 - 2 回目のタップ -> ピン 2 の注釈 - 3 回目のタップ -> ピン 3 の注釈 - 4 回目のタップ-> ピン 1 の注釈
どのように実装すればよいですか?
次のような状況があります: - 座標は同じだがタイトルと情報が異なる 3 つのピン - マップ上にはピンが 1 つしかない
そのピンを複数回タップすると、注釈が次のように表示されます。 - 最初のタップ -> ピン 1 の注釈 - 2 回目のタップ -> ピン 2 の注釈 - 3 回目のタップ -> ピン 3 の注釈 - 4 回目のタップ-> ピン 1 の注釈
どのように実装すればよいですか?
デリゲート メソッドを実装しdidSelectAnnotationView
、最後の「正しい」選択内容に応じて、自分で「正しい」注釈を選択できます。
マップ上にこれらのアノテーションのみがあり、それらのクラスターが 1 つしかない場合は、最後に選択されたアノテーションが何であったかを記憶する 1 つの ivar を保持し、int
デリゲート メソッドでそれをインクリメントできます。
例えば:
// In .h
int lastAnnotationSelected;
// In .m
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{
int nextAnnotationToSelect = (lastAnnotationSelected + 1)
% mapView.annotations.count;
id<MKAnnotation> nextAnnotation =
[mapView.annotations objectAtIndex:nextAnnotationToSelect];
[mapView selectAnnotation:nextAnnotation animated:YES];
lastAnnotationSelected = nextAnnotationToSelect;
}
showsUserLocation
オンにしている場合は、MKUserLocation
そのメソッドにチェックを追加して (必要に応じて) スキップし、クラスター内の次のアノテーションに移動する必要があります。
また、複数の注釈クラスター (座標 A に 3 つ、座標 B に 5 つ、座標 C に 4 つなど) がある場合は、lastAnnotationSelected int の配列を追跡し、メソッドで最初に何を決定するかを決定する必要があります。クラスターが選択され、そのクラスターで選択する次の注釈を取得します。