Detectar un gesto panorámico en GMSMapView

Tengo un GMSMapView que permite un puñado de gestos dentro de él (pan, zoom, etc.). Estoy intentando implementar un menu deslizante de estilo Facebook desde esta vista. ¿Cuál es la mejor manera de detectar un gesto panorámico desde esta vista mientras se permite que todos los demás gestos funcionen correctamente? Estoy seguro de que hay una manera mucho mejor de hacer esto, pero esto es lo que tengo hasta ahora. ¿Alguna sugerencia?

-(void)didPan:(UIPanGestureRecognizer*)gesture { static BOOL g1 = NO; if(gesture.state == UIGestureRecognizerStateBegan) { CGPoint location = [gesture locationInView:self]; if(location.x < 90) g1 = YES; } if(gesture.state == UIGestureRecognizerStateChanged && g1) { CGPoint velocity = [gesture velocityInView:self]; if(velocity.x > 0) { //Slide out menu } else { //Normal map view panning, zooming, etc. } } } 

Paul de Lange tiene la idea correcta, pero hay un par de puntos adicionales a tener en count.

No puede configurar los gestos de GMSMapView para que fallen con requiresGestureRecognizerToFail: porque están ocultos por el SDK. Lo que puede hacer es modificar la configuration de su instancia de GMSMapView . En particular, la configuration de mapView.settings.scrollGestures = NO detendrá el desplazamiento del map mientras mapView.settings.scrollGestures = NO .

Recuerde volver a establecerlo en YES después de que se UIScreenEdgePanGestureRecognizer gesto UIScreenEdgePanGestureRecognizer .

El UIScreenEdgePanGestureRecognizer podría ayudarlo si configura el gesto de paneo de maps para requerir que el reconocedor de gestos de paneo del borde de la pantalla falle primero con -requiresGestureRecognizerToFail:

Como alternativa, implemente el método -gestureRecognzierShouldBegin: para el reconocedor de gestos g1 y devuelva NO si el punto es inferior a 90 (como lo hizo anteriormente).