Переключение управления UITouch с касаний Начать на UIScrollViewDelegate - PullRequest
0 голосов
/ 19 сентября 2018

Я занимаюсь разработкой приложения для рисования на iOS, основной особенностью которого является то, что пользователь может загрузить изображение в качестве фона, а затем начать рисовать пальцем поверх него, увеличивая и панорамируя изображение с помощью рисования поверх самого изображения..

Схема приложения следующая.

MainUiView-> UIScrollView-> UIImageView

Рисование и отслеживание пальцев осуществляется на touchesBegan, touchesMoved, touchesEnded переопределение UIResponder.

Управление масштабированием и панорамированием UIImageView осуществляется реализацией UIScrollViewDelegate.

У меня есть кнопка, которая переключает приложениеперейдите из режима рисования в режим масштабирования и панорамирования следующим образом:

, если вы хотите нарисовать:

    [scrollView setUserInteractionEnabled:NO];
    [imageView setUserInteractionEnabled:YES];

, чтобы касания управлялись в touchesBegan, touchesMoved, touchesEnded методов.

, если вы хотите выполнять панорамирование и масштабирование двумя пальцами, используя жест Pinch to Zoom

[scrollView setUserInteractionEnabled:YES]; 
[imageView setUserInteractionEnabled:NO];

, поэтому дважестом пальца управляет UIScrollViewDelegate

сейчас пытаюсьчтобы развить приложение, убрав кнопку переключения из режима рисования в режим масштабирования и панорамирования.

Моя идея состояла в том, чтобы отследить присутствие двух пальцев в touchesBegan, а затем отключить взаимодействие с пользователем в UIImageView длявключите взаимодействие с пользователем в просмотре прокрутки, но проблема в том, что после этого все еще обрабатываются в методе touchesMoved, ничего не доходит до scrollViewDelegate до тех пор, пока я не уберу пальцы с экрана, после этого, если я нажимаю пальцамиснова на экране все управляется scrollViewDelegate.

Итак, подведем итог: можно ли остановить цикл касаний после touchesBegan и распространить его на ScrollViewDelegate?

Если это невозможно, как я могу добиться увеличения, панорамирования и рисования на UImageView?Должен ли я удалить вид прокрутки и попытаться увеличить и панорамировать UImageView с помощью UIResponder методов?

Спасибо за помощь

1 Ответ

0 голосов
/ 19 сентября 2018

Попробуйте изменить реализацию, чтобы использовать распознаватели жестов вместо обработки касанием с помощью методов UIResponder.Основные преимущества этого подхода:

  • Вы можете использовать UIPanGestureRecognizer для рисования или даже создать пользовательский распознаватель
  • . Вы можете иметьотношения зависимостей между распознавателями, использующие requireGestureRecognizerToFail , даже для разных представлений
  • Вы можете проходить по всем распознавателям в представлении и отключать только определенный набор жестов, не отключая касания всего представления
  • Распознаватели жестов имеют те же методы, связанные с прикосновением, которые можно использовать для перемещения кода обработки прикосновения от текущей реализации к жестам

Таким образом, представление вашего изображения будет иметь панорамирование или ваш собственный жестраспознаватель, одним касанием, для рисования, и вы можете циклически проходить по распознавателям scrollview и помечать их как не запускаемые, если запускается жест «рисования», используя requireGestureRecognizerToFail.

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

Удачное кодирование:)

...