Разрешение прохождения событий одиночного касания через UIScrollView

У меня есть представление drawingView для рисования, в котором я использую touchBegan, Moved, End, чтобы добавить кривые в подпредставление renderingView, которое их отображает. Я также хотел поддерживать масштабирование и панорамирование на этом же экране, поэтому я добавил UIScrollView в качестве подпредставления drawingView и вернул renderingView в методе viewForZooming моего делегата scrollView.

Теперь все масштабирование / панорамирование работает. renderingView увеличивает масштаб, по-прежнему отображает кривые Безье, я могу панорамировать увеличенное изображение при рендеринге и т. Д. Однако моя первоначальная функция рисования в renderingView с использованием методов касаний * из drawingView больше не работает, так как просмотр прокрутки subview и потребляет события касания.

Я готов установить для панорамирования прокрутки как минимум жесты с двумя пальцами, поэтому масштабирование / сжатие и панорамирование будут жестами с двумя пальцами, оставляя место для canvasView для обработки событий касания одним пальцем * для добавления информации о пути.

Теперь я нашел способ (хотя это похоже на взлом) установить жест панорамирования прокрутки как минимум на два касания пальцами, перебирая его жесты и проверяя, когда это жест панорамирования. Однако установка минимального количества касаний двумя пальцами не позволяет моему canvasView начать получать события касания. Как я могу это сделать?

TL;DR

Подпредставление UIScrollView пожирает события touchesBegan / Moved / Ended своего супервизора. Как я могу обойти это, если я хочу ограничить события scrollView жестами двумя пальцами и позволить жестам одним пальцем обрабатывать суперпредставление?


person Alex Bollbach    schedule 24.04.2017    source источник


Ответы (1)


Подумайте об использовании распознавателей жестов, это облегчит вашу жизнь. Также используйте единое представление для получения событий касания и передачи данных касания другим объектам.

Используйте UIPinchRecognizer для масштабирования и панорамирования, UIPanRecognizer для фактического рисования. Вы можете установить для UIPanRecognizer.maximumNumberOfTouches значение 1.

Вы можете проверить сайт Apple для получения подробной информации о реализации.

https://developer.apple.com/reference/uikit/uigesturerecognizer

person koray1396    schedule 29.04.2017
comment
Проблема с жестами в том, что у них действительно есть небольшая задержка перед тем, как они начнут действовать. что приводит к задержкам при рисовании. во-вторых, в представлении прокрутки есть 3 жеста, и сложно установить их все на 2 минимальных касания, чтобы любые события 1 касания аккуратно распространялись через представление прокрутки. - person Alex Bollbach; 29.04.2017