У меня есть собственный подкласс UIScrollView с некоторыми представлениями содержимого внутри. В некоторых из них у меня есть UITapGestureRecogniser. Все работает нормально, когда прокрутка не прокручивается. Но когда он прокручивает просмотры контента, он не получает действия касания. Какое самое простое решение для обработки действия касания с помощью подпредставления во время прокрутки прокрутки?
Детали:
MyScrollView
прокручивается горизонтально. Он содержит много просмотров контента (, например.MyContentView
). Каждый MyContentView
имеет ширину около одной трети ширины MyScrollView
. Таким образом, в данный момент существует около 3 -4 видимых MyContentView
элементов. Основное поведение MyScrollView
заключается в том, чтобы 1 )убедиться, что после прокрутки один из элементов MyContentView
будет в центре экрана, и 2 )прокрутить к центру MyContentView
, если пользователь нажмет на это . Итак, главный ответ, который я надеюсь получить, заключается в том, как «правильно» реализовать обработку нажатия в MyContentView
, пока MyScrollView
замедляется.
Я нашел несколько одинаковых вопросов и ответов, но ни один из них меня не удовлетворил. Лучше всего было реализовать gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:
делегата UITapGestureRecogniser. Но в этом случае я иногда (когда постукиваю, слегка перетаскиваю и отпускаю палец, так что постукивание становится узнаваемым (давайте назовем его квази-стуком))имеют как события касания, так и события прокрутки, и это приводит к ошибкам для меня, даже если прокрутка не прокручивается, когда я начинаю касание. Когда пользователь совершает квазикасание , мое приложение пытается прокрутить до элемента MyContentView
с постукиванием, а затем немедленно обрабатывает обычную прокрутку. Это кажется еще более ужасным из-за того, что некоторые другие функции начинают выполняться после нажатия (и не должны выполняться при обычной прокрутке ).
Мне нужно решение, при котором просмотр прокрутки достаточно подождет, чтобы решить, что это не событие касания, и только затем выполните прокрутку.В противном случае, если событие касания распознало прокрутку, оно не должно происходить.