Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.
        }  
    }
}
like image 550
i2Fluffy Avatar asked Aug 16 '14 11:08

i2Fluffy


1 Answers

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.

like image 87
phansen Avatar answered Oct 07 '22 15:10

phansen