在GMSMapView中检测平移手势

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.
        }  
    }
}
2个回答

7
Paul de Lange的想法是正确的,但还需要考虑一些其他要点。
无法使用GMSMapView中的手势设置来使requiresGestureRecognizerToFail: 失败,因为这些被SDK隐藏了。您可以修改您的GMSMapView实例的设置。特别是,设置mapView.settings.scrollGestures = NO将停止地图在您滑动时滚动。
只需记得在UIScreenEdgePanGestureRecognizer 手势完成后将其设置回YES即可。

1

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

或者,针对g1手势识别器实现UIGestureRecognizerDelegate方法-gestureRecognzierShouldBegin:,如果点数小于90,则返回NO(就像您上面所做的一样)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接