Определить жест панорамирования в 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 ответа

Решение

Пол де Ланж имеет правильную идею, но есть несколько дополнительных моментов, которые нужно иметь в виду.

Вы не можете установить жесты от GMSMapView потерпеть неудачу с requiresGestureRecognizerToFail: потому что те скрыты SDK. Что вы можете сделать, это изменить настройки вашего экземпляра GMSMapView, В частности, настройка mapView.settings.scrollGestures = NO остановит прокрутку карты, пока вы перемещаетесь.

Просто не забудьте установить его обратно YES после UIScreenEdgePanGestureRecognizer Жест завершен.

UIScreenEdgePanGestureRecognizer может помочь вам, если вы установите жест панорамирования карт так, чтобы сначала распознаватель жестов панорамирования экрана не работал с -requiresGestureRecognizerToFail:,

В качестве альтернативы можно реализовать метод UIGestureRecognizerDelegate. -gestureRecognzierShouldBegin: для распознавателя жестов g1 и верните NO, если точка меньше 90 (как вы делали выше).

Другие вопросы по тегам