14

複数のコールアウトを同時に開くことはできますか?

コード:

- (void)mapViewDidFinishLoadingMap:(MKMapView *)theMapView {
    for (id<MKAnnotation> currentAnnotation in theMapView.annotations) {
        [theMapView selectAnnotation:currentAnnotation animated:YES];
    }
}

コールアウトを 1 つだけ開きます。

4

3 に答える 3

9

プログラムで注釈を選択するためのメソッド on MKMapView(not MKAnnotationView) があることに注意してください。これは、多かれ少なかれ期待どおりに機能します。

- (void)selectAnnotation:(id < MKAnnotation >)annotation animated:(BOOL)animated

ただし、現在の注釈は同時に自動的に選択解除されるため、問題は解決しません。

奇妙なことに、MKMapView現在選択されている注釈の配列を保持しているように見えるプロパティがあります。

@property(nonatomic, copy) NSArray *selectedAnnotations

しかし、この方法に関するドキュメントには次のように書かれています。

「このプロパティに新しい配列を割り当てると、配列内の最初の注釈のみが選択されます。」

これは興味深いかもしれないと思っただけです。

于 2010-06-24T18:41:25.070 に答える
7

厳密な API の観点からは、これは不可能に思えます。

-(void)setSelected:(BOOL)selected animated:(BOOL)animatedセレクターは次のようにMKAnnotationView述べています。「このメソッドを直接呼び出すべきではありません。MKMapView オブジェクトは、注釈とのユーザー インタラクションに応答してこのメ​​ソッドを呼び出します。」したがって、基本的なメッセージは、ユーザー選択の完全な責任の下での注釈ビュー インスタンスの選択であるということです。また、ユーザーは一度に 1 つしか選択できないため、同時に複数を選択することはできません。

このメソッドを直接呼び出すべきではないとドキュメントに記載されていてもsetSelected:YES、いくつかのMKAnnotationViewインスタンスで呼び出して、それが何をもたらすかを確認しようとしましたか?

私がやろうとしているクリーンな方法:(ただし、自分でテストしていません)

  • MKMapView の選択メカニズムに依存しない
  • MKAnnotationView をサブクラス化して、カスタム ビューを実装します。
  • 吹き出しが注釈ビューの一部になるようにカスタマイズして、それらのいくつかを表示できるようにします。

このようにすると、複数のコールアウト バブルを同時に表示して、次のような結果を得ることができます。

代替テキスト http://a1.phobos.apple.com/us/r1000/048/Purple/2b/b2/ec/mzl.ttcsrlee.480x480-75.jpg

于 2010-03-10T16:09:12.623 に答える