2012-11-12 2 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을 다시 선택하지 않도록하는 한 가지 해결 방법은 주석을 선택 취소하기 전에 약간의 지연을 추가하는 것입니다.

- (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]; 
     } 
} 
관련 문제