Ios 在GMSMapView中检测平移手势

Ios 在GMSMapView中检测平移手势,ios,objective-c,uigesturerecognizer,uipangesturerecognizer,gmsmapview,Ios,Objective C,Uigesturerecognizer,Uipangesturerecognizer,Gmsmapview,我有一个GMSMapView,它允许在里面做一些手势(平移、缩放等)。我正试图从这个视图中实现一个Facebook风格的滑出菜单。在允许所有其他手势正常工作的情况下,从该视图中检测平移手势的最佳方法是什么?我相信有更好的方法可以做到这一点,但这就是我目前所拥有的吗?有什么建议吗 -(void)didPan:(UIPanGestureRecognizer*)gesture { static BOOL g1 = NO; if(gesture.state == UIGestureRe

我有一个GMSMapView,它允许在里面做一些手势(平移、缩放等)。我正试图从这个视图中实现一个Facebook风格的滑出菜单。在允许所有其他手势正常工作的情况下,从该视图中检测平移手势的最佳方法是什么?我相信有更好的方法可以做到这一点,但这就是我目前所拥有的吗?有什么建议吗

-(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.
        }  
    }
}
-(void)didPan:(UIPangestureRecognitor*)手势
{
静态布尔g1=否;
if(signature.state==UIGestureRecognitizerStateStart)
{
CGPoint位置=[手势位置视图:self];
如果(位置x<90)
g1=是;
}
if(signature.state==UIGestureRecognitzerStateChanged&&g1)
{
CGPoint速度=[手势速度视图:自我];
如果(速度x>0)
{
//滑出菜单
}
其他的
{
//普通地图视图平移、缩放等。
}  
}
}
如果您使用
-requiresgestureRecognitizerToFail:
将地图平移手势设置为要求屏幕边缘平移手势识别器首先失败,则可能会对您有所帮助


或者,为g1手势识别器实现UIgestureRecognitizerDelegate方法
-gestureRecognzierShouldBegin:
,如果点小于90,则返回NO(如上所述)。

Paul de Lange的想法正确,但还有几点需要记住

您不能将
GMSMapView
中的手势设置为使用
requiregesturecognizertofail:
失败,因为这些手势被SDK隐藏。您可以做的是修改
GMSMapView
实例的设置。特别是,设置
mapView.settings.ScrollPictures=NO
将在平移时阻止地图滚动

在完成
UIScreenedGepangestureRecognitor
手势后,请记住将其设置回
YES