2012-09-20 19 views
6

en ios 5 Pude desactivar el zoom de doble toque anulándolo con un nuevo gesto de doble toque. Pero parece que el gesto de doble toque ya no está en la matriz gestorrecognizer que viene con mkmapview.Desactivar zoom de doble toque en MKMapView (iOS 6)

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

devuelve nada en IOS 6, donde en iOS 5 volvería 2 reconocedores, uno para solo toque y uno de doble toque.

Respuesta

7

Miraría a través de los reconocedores de gestos de las subvistas de MKMapView. Probablemente todavía esté allí en algún lugar.

Por supuesto, jugar un poco con los recursos genéticos de otro punto de vista es un poco dudosa y probablemente se romperá la próxima vez que Apple cambia algo en MKMapView ...

EDIT: Para el beneficio de cualquier otra persona que lee esto, por favor compruebe que es un UITapGestureRecognizer y que numberOfTapsRequired == 2 y numberOfTouchesRequired == 1.

Además, en lugar de deshabilitar los toques dobles en el mapa por completo, considere agregar un doble toque GR en la anotación y luego hacer [mapDoubleTapGR requireGestureRecognizerToFail:annotationDoubleTapGR]. De nuevo, hacky — ¡No me culpen si se rompe en la próxima actualización del sistema operativo!

+0

¡Tenías razón! Gracias. – Ludvig

+0

@Ludvig: Ver también el segundo párrafo de mi edición :) –

+0

Esto funcionó para mí. iOS 9. – aparesidam

2

¿Desea que el usuario haga algo con la vista? De lo contrario, es suficiente establecer userInteractionEnabled en NO. Si es así, ¿qué interacciones específicas necesitas permitir? ¿Todo menos presionar dos veces? ¿Por qué desactivar esa interacción?

Cuanto más sepamos acerca de su caso de uso, mejores serán las respuestas que podemos proporcionar.

+0

Quiero que el usuario pueda tocar, no tocar dos veces. En mi aplicación, el usuario a veces tiene que tocar varias veces en una anotación, así que no quiero que la aplicación haga zoom. Gracias por ayudarnos – Ludvig

0

En su lugar, puede usar un gesto de toque largo, eso funciona.

2

Esto funcionó para mí: [_mapView.subviews [0] addGestureRecognizer: MyDoubleTapOverrider];

+0

esto es muy fácil de usar y funciona para mí. – junaidsidhu

1

Esto funciona para mí:

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

Y luego dejar que el bucle de función recursiva a través de los subvistas y encontrar el 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]; 
     } 
    } 

Este ejemplo elimina todos los GR-gr: s. Pero supongo que puedes especificar eliminar lo que quieras.

Cuestiones relacionadas