2012-09-20 15 views
6

in ios 5 Ich konnte die Doppeltipp-Zoomfunktion deaktivieren, indem ich sie einfach mit einer neuen Doppeltippgeste übersteuerte. Aber es scheint, dass die Doppeltipp-Geste nicht mehr im Gestenerkennung-Array ist, das mit der mkmapview geliefert wird.Deaktiviere Doppeltippen-Zoom in MKMapView (iOS 6)

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

kehrt nichts in ios 6, wo in 5 ios es 2 Erkenner zurückkehren würde, einen für einzelnen Hahn und einen für Doppel-Tippen.

Antwort

7

Ich würde die Gestenerkenner von MKMapViews Unteransichten durchsehen. Es ist wahrscheinlich immer noch irgendwo da.

Natürlich Herumspielen mit anderen GRs Sicht etwas zweifelhaft und wird das nächste Mal, wenn Apple ändert sich etwas über MKMapView wahrscheinlich brechen ...

EDIT: Zum Wohle sonst jemand der Lektüre dieses, bitte überprüfen Sie, dass es ein UITapGestureRecognizer ist und dass numberOfTapsRequired == 2 und numberOfTouchesRequired == 1.

Anstatt doppeltes Tippen auf die Karte ganz zu deaktivieren, sollten Sie auch einen Doppelklick auf die Anmerkung hinzufügen und dann [mapDoubleTapGR requireGestureRecognizerToFail:annotationDoubleTapGR]. Nochmal, hacky — mich nicht beschuldigen, wenn es beim nächsten OS Update bricht!

+0

Du hattest Recht! Vielen Dank. – Ludvig

+0

@Ludvig: Siehe auch den zweiten Abschnitt meiner Bearbeitung :) –

+0

Das hat bei mir funktioniert. iOS 9. – aparesidam

2

Möchten Sie den Benutzer etwas mit der Ansicht machen lassen? Wenn nicht, reicht es, userInteractionEnabled auf NO zu setzen. Wenn ja, welche spezifischen Interaktionen müssen Sie zulassen? Alles außer Doppelklick? Warum diese eine Interaktion deaktivieren?

Je mehr wir über Ihren Anwendungsfall wissen, desto besser können wir Ihnen die Antworten geben.

+0

Ich möchte der Benutzer in der Lage zu tippen, nicht doppelt tippen. In meiner App muss der Nutzer manchmal mehrmals auf eine Anmerkung tippen, damit die App nicht zoomen kann. Danke für deine Hilfe. – Ludvig

0

Sie können stattdessen eine lange tippen Geste, die funktioniert.

2

Das funktionierte für mich: [_mapViewsviews [0] addGestureRecognizer: MyDoubleTapOverrider];

+0

das ist sehr einfach zu bedienen, und arbeite für mich. – junaidsidhu

1

Dies funktioniert für mich:

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

Und dann die rekursive Funktion eine Schleife durch die Subviews lassen und die GR finden: 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]; 
     } 
    } 

In diesem Beispiel werden alle tap-GR: s entfernt. Aber ich denke, du kannst angeben, was du willst.