У меня возникла проблема с попыткой настроить цепочку респондентов для жестов
Я пришел из Cocoa / macOS & Mouse Events, и концепция жестов меня сбила с толку
Основаны на предположенияхв моем исследовании:
Вместо того, чтобы события мыши передавались в NSResponders
, есть события Tap, Press и Gesture.Нажмите и нажмите, чтобы получить UIResponders
, Жесты передаются GestureRecognizers
(принадлежит UIView
)
Разница между touchBegan / touchMoved / touchEnded и распознавателем жестов зависитна скорость пальца?( uigesturerecognizers-против-touchesbegan-touchesmoved-touchesended-точность ).Поэтому, если вы нажмете и медленно переместитесь, базовый UIView получит события touchMoved
.Если вы быстро нажмете и перетащите, жест будет создан и передан в GestureRecognizer базового UIView
. Я не совсем уверен в этом вопросе, поэтому я открываю еще один вопрос для решения этой проблемы
Когда я говорю «проведите пальцем влево», я имею в виду противоположное направлениетвой палец уходит, а я имею ввиду левый как в направлении навигационной анимации.то же самое с «проведением вправо».
У меня проблема с тем, что мои "Жесты" не отправляются в устройства распознавания жестов, которые я хотел бы.(Первоначально я думал, что жесты перешли к контроллерам, но с тех пор я узнал, что это не так, и GestureRecognizer принадлежат представлениям)
Иерархия представлений:
- «Swipeable» UITabBarController ( SwipeableTabBarController )
- UIViewController
- UIViewController
- UIViewController (UIView_InueULL))
- CollectionViewController (CollectionView)
Итак, вот что я пытаюсь сделать:
- Если вы проведете пальцем по экрану в любом месте, вы будете перемещаться между 3
UIViewControllers
(Спасибо SwipeableTabBarController
) - Если вы проведете пальцем вправо по третьему крайнему правому
UIViewController
,вы на самом деле пролистаете страницы PageViewController
) - Если вы проведете пальцем влево на третьем
UIViewController
(который содержит PageViewController
), и вы окажетесь на самой левой странице PageViewController
, вы идете налево во второй (средний)UIViewController
Однако ,
После перехода к крайнему правому UIViewController
все жесты смахивания используютсяUIQueueingScrollView
на UIPageViewController
.Это означает, что как только вы окажетесь в крайнем правом виде, вы не сможете провести пальцем назад влево к среднему виду.Смахивание просто переворачивается между страницами, (и в случае нахождения на левой странице ничего не происходит)
Я вручную перечислил по подпредставлениям, чтобы найти это UIQueueingScrollView
, и удалил все GestureRecognizers
от него, и это позволяет жестам передаваться до SwipeableTabBarController
, так что вы можете провести назад к среднему виду ... Но это, конечно, нарушает прокрутку UIPageViewController
Моя цель:
Каким-то образом изменить GestureRecognizer в UIPageViewController
(похоже, я должен сделать это на _UIQueueingScrollView
), так что
Мое самое большое зависание в том, что я не могу просто переопределить приемники жестов, мне нужно создавать новые пользовательские GestureRecognizer и вручную прикреплять их к моим представлениям ... но тогда я нене знаю, как эти новые пользовательские GestureRecognizer передают жесты вверх по иерархии представления