Обнаружить жест панорамы в 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.
        }  
    }
}

Ответ 1

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

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

Не забудьте вернуть его к YES после того, как жест UIScreenEdgePanGestureRecognizer будет завершен.

Ответ 2

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

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