2012-11-12 32 views
5

Mam aplikację na iOS z niestandardowymi adnotacjami.Wybierz MKAnnotationView, aby usunąć zaznaczenie i ukryć jego objaśnienie.

  1. Chcę być w stanie dopasować się MKAnnotationView raz, aby pokazać, że to objaśnienie (działa poprawnie)
  2. a następnie chcę, by wykorzystać MKAnnotationView drugi raz, aby usunąć zaznaczenie adnotacji i ukryć objaśnienia za to adnotacja (działa w systemie iOS5, ale nie w systemie iOS6).

Rozumiem, że didSelectAnnotationView ma być tylko wywoływany do początkowego wyboru adnotacji. ([1]: Selecting a MapView Annotation Twice ) i na podstawie tego artykułu i innych artykułów, które przeczytałem ([2]: ios mapkit closing annotation callouts by tapping the map), wygląda na to, że wykrycie dodatkowego kliknięcia na MKAnnotationView po wybraniu wymaga UITapGestureRecognizer.

Używam narzędzia UITapGestureRecognizer i prawidłowo wykrywam dodatkowe kliknięcia w widokach adnotacji, gdy są one już wybrane, a następnie wywołuję opcję odznaczeniaAnnotacja, gdy rozpoznam kran i ukrywam/usuwam zaznaczenie odpowiednio objaśnienie/adnotacja. Działa świetnie w systemie iOS5, ale działa tylko w połowie iOS6

W iOS6 jest uruchamiany program do rozpoznawania gestów i wywołuję mój kod, aby ukryć objaśnienie i anulować wybór adnotacji i wszystko jest w porządku, ale potem metoda selectAnnotationView zostaje wywołany, więc moje objaśnienie pojawia się ponownie i moja adnotacja zostaje ponownie wybrana.

To, co zakładam, że się dzieje, polega na tym, że natychmiast po usunięciu zaznaczenia widoku adnotacji w moim czytniku gestów dotykowych, zdarzenie tap jest nadal aktywne, mapView wykrywa zdarzenie dotykowe i wywołuje selectAnnotationView, a więc adnotacja, że ​​de-selected została właśnie wybrana ponownie.

Nie mam pojęcia, dlaczego tak się dzieje tylko w iOS6, ale mam nadzieję, że będę mógł przedstawić wszelkie inne pomysły dotyczące postępowania z pożądanym zachowaniem.

+0

można pokazać kod? – james075

Odpowiedz

0

Nie wiem, czy nadal masz problem (mam nadzieję, że nie, ponieważ twój post jest trochę stary). Ale na wypadek, gdyby niektóre osoby miały ten sam problem, jedno rozwiązanie do odznaczenia adnotacji i uniknięcia mapKit, aby ponownie wybrać, należy dodać trochę opóźnienia przed odznaczeniem adnotacji.

- (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]; 
} 

A w przypadku, gdy użytkownik odznaczyć adnotacji na mapie Dotknij donMt wykuć usunąć ten gest z tym kodem

- (void) mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view { 
     for (UIGestureRecognizer *recognizer in view.gestureRecognizers) { 
      [view removeGestureRecognizer:recognizer]; 
     } 
}