6

私はsthを実装するのが好きです。このような。コールアウト付きの注釈が2つありますが、MKMapViewでは同時に1つしか選択できません。

[mapView selectAnnotation:self.firstAnnotation animated:FALSE];
[mapView selectAnnotation:self.secondAnnotation animated:FALSE];

別の注釈を選択すると、最初の注釈が自動的に選択解除されます。

しかし、下の図では、正常に実装されています。では、これはどのように行うことができますか? http://oi52.tinypic.com/14t3t09.jpg

4

1 に答える 1

5

「MKMapViewに表示される複数の注釈コールアウト」も参照してください。MKMapViewに表示される 複数の注釈コールアウト

フレームワークは複数の選択をサポートしていないようです。そのため、この動作にはカスタムコールアウトを実装する必要があります。リンクされた質問への回答は、選択を自分で管理できるように、コールアウトを注釈ビューの一部にすることを提案しています。個人的には、コールアウトを個別のアノテーションとして実装するのが好きです。カスタムコールアウトを使用したサンプルプロジェクトがここにあります。

https://github.com/jacobjennings/JJMapCallout

これが私の解決策でした:

MKAnnotationView-カスタム注釈ビューをロックして、場所の更新を固定します

このプロジェクトでは、MKMapViewデリゲートメソッドを転送します

- (void)mapView:(MKMapView *)aMapView didSelectAnnotationView:(MKAnnotationView *)aView
- (void)mapView:(MKMapView *)aMapView didDeselectAnnotationView:(MKAnnotationView *)aView

それぞれの注釈に。これにより、予想されるコールアウト動作を実装できます。ただし、didDeselectAnnotationViewメッセージを無視して、コールアウトを表示したままにすることができます。

ユーザーが地図をタップして注釈をクリアしたかどうか(ピンをタップしなかったかどうか)を確認するには、didDeselectAnnotationViewメソッドでmapView.selectedAnnotationsの値を確認します。値が空の場合は、コールアウトをクリアする必要があります。

于 2011-09-12T16:51:33.530 に答える