2012-09-20 16 views
6

w ios 5 Mogłem wyłączyć podwójny zoom, zastępując go nowym podwójnym gestem dotykowym. Wydaje się jednak, że gest podwójnego dotknięcia nie znajduje się już w tablicy gestów rozpoznawczych, która jest dołączona do mkmapview.Wyłączanie podwójnego zoomu w widoku MKMapView (iOS 6)

NSArray *gestureRecognizers = [_mapView gestureRecognizers]; 
for (UIGestureRecognizer *recognizer in gestureRecognizers) { 
    NSLog(@"%@", recognizer); 
} 

nic nie zwraca w ios 6, gdzie w ios 5 zwracałoby 2 identyfikatory, jeden dla pojedynczego stuknięcia i jeden dla podwójnego stuknięcia.

Odpowiedz

7

Przeglądam gesty rozpoznające podobieństwa MKMapView. Pewnie wciąż gdzieś tam jest.

Oczywiście, aprowizacji z innego widoku za GRS jest nieco wątpliwe i najprawdopodobniej pęknie następnym razem Jabłko zmienia coś o MKMapView ...

EDIT: Z korzyścią dla nikogo innego czytając to, proszę sprawdzić, że jest to UITapGestureRecognizer i że numberOfTapsRequired == 2 i numberOfTouchesRequired == 1.

Oprócz dwukrotnego dotknięcia podwójnego dotknięcia mapy należy rozważyć dodanie podwójnego dotknięcia przycisku GR na adnotacji, a następnie wykonać [mapDoubleTapGR requireGestureRecognizerToFail:annotationDoubleTapGR]. Ponownie, hacky — nie obwiniaj mnie, jeśli zepsuje się przy następnej aktualizacji systemu operacyjnego!

+0

Masz rację! Dzięki. – Ludvig

+0

@Ludvig: Zobacz także drugi akapit mojej edycji :) –

+0

To działało dla mnie. iOS 9. – aparesidam

2

Czy chcesz, aby użytkownik robił cokolwiek z widokiem? Jeśli nie, wystarczy ustawić userInteractionEnabled na NO. Jeśli tak, na jakie konkretne interakcje musisz zezwolić? Wszystko oprócz podwójnego podsłuchu? Dlaczego wyłączyć tę jedną interakcję?

Im więcej wiemy o Twoim przypadku użycia, tym lepsze są odpowiedzi, które możemy udzielić.

+0

chcę użytkownika, aby być w stanie dopasować, a nie dwukrotnie. W mojej aplikacji użytkownik musi czasami stuknąć wiele razy w jedną adnotację, więc nie chcę, aby aplikacja była powiększana. Dzięki za pomoc – Ludvig

0

Zamiast tego możesz użyć długiego gestu, który działa.

2

To działało dla mnie: [_mapView.subviews [0] addGestureRecognizer: MyDoubleTapOverrider];

+0

jest to bardzo łatwy w użyciu i działa dla mnie. – junaidsidhu

1

Działa to dla mnie:

//INIT the MKMapView  
    -(id) init{ 
     ... 
     [self getGesturesRecursive:mapView]; 
     ... 
    } 

A potem niech rekurencyjną funkcję pętli za pośrednictwem subviews i znaleźć GR: s.

-(void)getGesturesRecursive:(UIView*)v{ 
     NSArray *gestureRecognizers = [v gestureRecognizers]; 
     for (UIGestureRecognizer *recognizer in gestureRecognizers) { 
      if ([recognizer isKindOfClass:[UITapGestureRecognizer class]]) {     
       [v removeGestureRecognizer:recognizer]; 
      } 
     } 

     for (UIView *v1 in v.subviews){ 
      [self getGesturesRecursive:v1]; 
     } 
    } 

W tym przykładzie usunięto wszystkie stuknięcia-GR: s. Ale domyślam się, że możesz usunąć, co chcesz.

Powiązane problemy