Search code examples
iosobjective-cuigesturerecognizeruipangesturerecognizergmsmapview

Detect A Pan Gesture in GMSMapView


I have a GMSMapView that allows for a handful of gestures inside of it (pan, zoom, etc). I am trying to implement a Facebook style slide out menu from this view. What is the best way to detect a pan gesture from within this view while still allowing for all the other gestures to work properly? I'm sure there is a much better way to do this, but this is what I have so far? Any suggestions?

-(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.
        }  
    }
}

Solution

  • Paul de Lange has the right idea, but there are a couple of additional points to keep in mind.

    You can't set gestures from GMSMapView to fail with requiresGestureRecognizerToFail: because those are hidden by the SDK. What you can do is modify the settings of your instance of GMSMapView. In particular, setting mapView.settings.scrollGestures = NO will stop the map from scrolling while you pan over.

    Just remember to set it back to YES after the UIScreenEdgePanGestureRecognizer gesture is complete.