在GMSMapView中检测平移手势

时间:2014-08-16 11:38:31

标签: ios objective-c uigesturerecognizer uipangesturerecognizer gmsmapview

我有一个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 个答案:

答案 0 :(得分:7)

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

您无法将GMSMapView的手势设置为requiresGestureRecognizerToFail:失败,因为SDK会隐藏这些手势。您可以执行的操作是修改GMSMapView实例的设置。特别是,设置mapView.settings.scrollGestures = NO会在您平移时阻止地图滚动。

请记住在YES手势完成后将其重新设置为UIScreenEdgePanGestureRecognizer

答案 1 :(得分:1)

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

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