Перехват жестов жесты над прокруткой прокрутки UIScrollView
У меня есть вертикальная прокрутка UIScrollView
. Я также хочу обрабатывать горизонтальные панорамы, позволяя по умолчанию выполнять вертикальное прокрутку по вертикали. Я поместил прозрачный UIView
поверх прокрутки и добавил к нему распознаватель жесты. Таким образом, я могу получить кастрюли просто отлично, но тогда просмотр прокрутки не получает никаких жестов.
Я реализовал следующие методы UIPanGestureRecognizerDelegate
, надеясь ограничить свой распознаватель жестов только горизонтальными кастрюлями, но это не помогло:
- (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer
{
// Only accept horizontal pans here.
// Leave the vertical pans for scrolling the content.
CGPoint translation = [gestureRecognizer translationInView:self.view];
BOOL isHorizontalPan = (fabsf(translation.x) > fabsf(translation.y));
return isHorizontalPan;
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return (otherGestureRecognizer == _scrollView.panGestureRecognizer);
}
Ответы
Ответ 1
ОК, я понял это. Мне нужно было сделать 2 вещи, чтобы сделать эту работу:
1) Прикрепите мой собственный распознаватель панорамы к самому представлению прокрутки, а не к другому виду поверх него.
2) Этот метод UIGestureRecognizerDelegate
предотвращает тупое поведение, которое происходит, когда одновременно запускаются как scrollview по умолчанию, так и мой собственный.
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return YES;
}
Ответ 2
У меня была такая же проблема, и я сделал это:
1) Прикрепите мой собственный распознаватель панорамы к просмотру прокрутки.
2) Возврат ДА:
- gestureRecognizer: shouldRecognizeSimultaneousWithGestureRecognizer:
Это позволит обеим жестам работать. Так что это означает, что в вертикальной прокрутке будут запущены как ваш делегат panGesture, так и scrollView Delegate. Если это горизонтальная прокрутка, вызов будет вызываться только делегатом panGesture.
3) в моем делегате panGesture, определите, является ли это горизонтальной прокруткой, если это не так, игнорируйте.