2012-11-12 11 views
5

私はカスタムアノテーションを持つiOSアプリを持っています。MKAnnotationViewをタップして選択を解除し、コールアウトを非表示にします

  1. が、私はそれが吹き出します表示するには、一度MKAnnotationViewをタップすることができるようにしたい
  2. を(正常に動作)、その後、私は、注釈を選択解除しMKAnnotationViewをもう一度タップすると、そのための吹き出しを非表示にしますアノテーション(iOS5では動作しますが、iOS6では動作しません)。

didSelectAnnotationViewは、アノテーションの最初の選択に対してのみ呼び出されると考えられます。 ([1]:Selecting a MapView Annotation Twice )、この記事と私が読んだ記事([2]:ios mapkit closing annotation callouts by tapping the map)に基づいて、MKAnnotationViewの追加のタップが検出されたように見えてから、UITapGestureRecognizerが必要です。

私はUITapGestureRecognizerを使用しています。既に選択されているときにアノテーションビューの追加のタップを適切に検出しています。タップを認識して非表示にすると、deselectAnnotationが呼び出されます。それぞれコールアウト/注釈。 iOS5でうまく動作しますが、iOS6では半分しか動作しません。

iOS6では、タップジェスチャ認識機能が呼び出され、コールアウトを非表示にして注釈を非表示にしてすべてを終了するコードを呼び出しますが、selectAnnotationViewメソッド何とか呼び出されるので、コールアウトが再び表示され、アノテーションが再び選択されます。

タップジェスチャ認識機能で注釈ビューの選択を解除した直後に、タップイベントはまだ有効であり、mapViewはタッチイベントを検出してselectAnnotationViewを呼び出すので、 が選択解除されている注釈が再び選択されています。

私はなぜそれがiOS6でしか起こらないのか分かりませんが、希望の動作を処理するための他のアイデアを入力したいと考えています。

+0

でジェスチャーを削除するにはマップタップdonMt鍛造に注釈を選択解除しますが、コードを表示することができますか? – james075

答えて

0

あなたの問題がまだ残っているかどうかはわかりません(あなたの投稿は少し古いので願っていません)。 しかし、同じ問題を抱えている人がいる場合は、注釈の選択を解除してmapKitを再選択しないようにする1つの解決方法は、注釈を選択解除する前に少し時間を追加することです。

- (void)annotationTap:(UIGestureRecognizer *)gesture 
{ 
    MKAnnotationView *mkav = (MKAnnotationView *)gesture.view; 
    //Add a small delay to deselect 
    [self performSelector:@selector(deselectAnnotation:) withObject:mkav.annotation afterDelay:0.3]; 
    [gesture.view removeGestureRecognizer:gesture]; 
} 


- (void)deselectAnnotation:(id<MKAnnotation>)annotation 
{ 
    [self.mapView deselectAnnotation:annotation animated:YES]; 
} 

とケース中のユーザーには、このコード

- (void) mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view { 
     for (UIGestureRecognizer *recognizer in view.gestureRecognizers) { 
      [view removeGestureRecognizer:recognizer]; 
     } 
} 
関連する問題