Обнаружить жест панорамы в 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 (как вы это делаете выше).