2009-09-22 2 views
7

ピンが非常に高密度になっているため、ピンが選択されたときにコールアウトがポップアップしますが、他のすべてのマップピンによってほとんど隠されます。正面には、選択されたマップピンの代理人(タップ付きコールアウト、選択されたピンではありません)がありました。MKAnnotation - マップピンのコールアウトが他のマップピンの後ろにポップアップ

回避策はありますか?

答えて

1

UICalloutビューは、MKAnnotationViewのサブビューです。だから、私はあなたが前面にマップpingを持って来ると思う、UICAlloutViewもそこになります。

+0

どのようにプログラムでフロントにUICalloutViewを持っていますか? – si28719e

2

カスタムアノテーションビューを使用している場合は、選択したプロパティのオブザーバを追加できます。このオブザーバは、ピンが選択されたときのデリゲートのように動作します。

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation{ 
    MKAnnotation *annview = ...code to either dequeue or create new object... 
    [annview addObserver:self forKeyPath:@"selected" options:NSKeyValueObservingOptionNew context:@"selectedmapannotation"];    
    return annview; 
} 

、あなたは

- (void)observeValueForKeyPath:(NSString *)keyPath 
        ofObject:(id)object 
        change:(NSDictionary *)change 
        context:(void *)context; 

で選択状態を監視することができMugunthクマーによってリンク答えはまた、それはあなたがあなたの質問にあるような機能デリゲートの言及をしただけのことだあなたの希望する結果が得られます。

編集:ここでは

がobserveValueForKeyPathの内容の一例です:ofObject:change:context:が方法

NSString *action = (NSString*)context; 

if([action isEqualToString:@"selectedmapannotation"]){ 
    BOOL annotationAppeared = [[change valueForKey:@"new"] boolValue]; 
    MKAnnotationView *ann = (MKAnnotationView *)object; 

    if (annotationAppeared) { 
     // do something with the annotation when it is selected 
    } 
    else { 
     // do something with the annotation when it is de-selected 
    } 
} 
+0

これについて詳しく説明できますか? observeValueForKeyPath実装は実際にどのように見えますか?あなたは例を挙げることができますか? – si28719e

+0

サンプルの実装を追加するための答えを編集しました。 – acqu13sce

関連する問題