Подтвердить что ты не робот

Перехват жестов жесты над прокруткой прокрутки 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);
}
4b9b3361

Ответ 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, определите, является ли это горизонтальной прокруткой, если это не так, игнорируйте.