Reputation: 423
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.
}
}
}
Upvotes: 11
Views: 1389
Reputation: 176
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.
Upvotes: 7
Reputation: 10633
The UIScreenEdgePanGestureRecognizer might help you if you set the maps pan gesture to require the screen edge pan gesture recognizer to fail first with -requiresGestureRecognizerToFail:
.
Alternatively implement the UIGestureRecognizerDelegate method -gestureRecognzierShouldBegin:
for the g1 gesture recognizer and return NO if the point is less than 90 (as you do above).
Upvotes: 1