11

我有一个 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.
        }  
    }
}
4

2 回答 2

7

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

您不能将手势设置GMSMapView为失败,requiresGestureRecognizerToFail:因为 SDK 隐藏了这些手势。你可以做的是修改你的实例的设置GMSMapView。特别是,设置mapView.settings.scrollGestures = NO将在您平移时停止地图滚动。

只需记住在手势完成YES后将其设置回。UIScreenEdgePanGestureRecognizer

于 2015-06-27T05:24:50.183 回答
1

如果您将地图平移手势设置为要求屏幕边缘平移手势识别器首先以-requiresGestureRecognizerToFail:.

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

于 2015-06-26T07:58:41.903 回答