4

次のような状況があります: - 座標は同じだがタイトルと情報が異なる 3 つのピン - マップ上にはピンが 1 つしかない

そのピンを複数回タップすると、注釈が次のように表示されます。 - 最初のタップ -> ピン 1 の注釈 - 2 回目のタップ -> ピン 2 の注釈 - 3 回目のタップ -> ピン 3 の注釈 - 4 回目のタップ-> ピン 1 の注釈

どのように実装すればよいですか?

4

1 に答える 1

2

デリゲート メソッドを実装し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 の配列を追跡し、メソッドで最初に何を決定するかを決定する必要があります。クラスターが選択され、そのクラスターで選択する次の注釈を取得します。

于 2011-07-07T14:32:48.943 に答える