У меня есть представление, которое отображает PDF. Он должен быть масштабируемым, поэтому я также создал UIScrollView, и в его делетете я внедрил viewForZoomingInScrollView, чтобы вернуть вид PDF. Все идет нормально. Однако, когда пользователь достигает края увеличенной страницы PDF, я хотел бы перейти на следующую страницу. Звучит просто, но я не могу понять, как это сделать.Как фильтровать события касания для UIScrollView?
Я пробовал несколько различных подходов:
Использование scrollViewDidScroll для обнаружения, если скроллинг достиг края. Проблема здесь в том, что если zoomScale равен 1, и поэтому прокрутка невозможна, эта функция никогда не вызывается. Но UIScrollView по-прежнему проглатывает все события касания, поэтому я также не могу обнаружить, чтобы достигнуть края в touchphonesMoved. Настройка canCancelContentTouches на NO, когда не масштабируется, не является вариантом, так как это также предотвращает масштабирование.
Подклассификация UIScrollView и пересылка некоторых событий касания в следующий ответчик. К сожалению, когда UIScrollView обнаруживает операцию перетаскивания и отменяет касание, touchsMoved и touchesEnded больше не вызываются даже для подкласса UIScrollView. Опять же, установка canCancelContentTouches на NO не является хорошей, поскольку это также предотвратит некоторые желаемые функции UIScrollView.
Создание прозрачного представления в верхней части прокрутки (как его родного брата), так что этот вид сначала получает все события касания, а затем пересылает некоторые касания в прокрутку. К сожалению, просмотр прокрутки не отвечает на эти вызовы.
Я не могу использовать touchsShouldCancelInContentView, потому что это не приводит к фактическим касаниям в качестве аргумента и не хочет ли я, чтобы представление прокрутки обрабатывало событие касания, также зависит от свойств самого события касания (например, движение касания в направлении, в котором мы уже находимся на краю, не должно отменяться прокруткой, но движение в другом направлении может быть).
Похоже, все, что UIScrollView делает это не инициировано touchesBegan/touchesMoved, но вместо этого он получает некоторые уведомления о прикосновениях пути перед тем этого. Возможно, каким-то недокументированным способом я не могу перехватить и воспроизвести.
Итак, есть ли способ получить уведомление обо всех движениях касания, выполняемых над UIScrollView, при этом все еще имея возможность использовать (при определенных условиях) UIScrollView для масштабирования и прокрутки?