【问题标题】:Detect A Pan Gesture in GMSMapView在 GMSMapView 中检测平移手势
【发布时间】:2014-08-16 11:38:31
【问题描述】:

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

【问题讨论】:

    标签: ios objective-c uigesturerecognizer uipangesturerecognizer gmsmapview


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      如果您将地图平移手势设置为要求屏幕边缘平移手势识别器首先使用-requiresGestureRecognizerToFail: 失败,UIScreenEdgePanGestureRecognizer 可能会对您有所帮助。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-01
        • 1970-01-01
        • 2013-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-20
        相关资源
        最近更新 更多