Подумайте о UIScrollView
со встроенными (подпредставлениями) UIView
, расположенными в столбце. В iOS6 и более ранних версиях представление прокрутки можно было настроить таким образом, чтобы, когда вы щелкаете по нему пальцем, встроенные представления не получали события касания, даже если начальное касание было на одном из подпредставлений; но если вы коснетесь подпредставления без пролистывания, представление прокрутки решит, что это не действие прокрутки, и перенаправит события касания во встроенные представления. Это было очень удобно, если вы хотели иметь возможность перетаскивать встроенные UIView
в файл UIScrollView
.
В iOS 7 документация указывает, что установка свойства UIScrollView
delaysContentTouches
приведет к задержке событий касания до тех пор, пока UIScrollView
не решит, прокручивается ли оно. Но на самом деле это просто не работает. Подпредставление немедленно получает события касания и отвечает на них, если событие касания прокрутки происходит в одном из подпредставлений. Таким образом, если подпредставление запрограммировано для перетаскивания, оно начинает перетаскивание, в то время как представление прокрутки также прокручивается.
Похоже, что модель этого поведения была изменена, так как iOS 5/6 подавляли сенсорные события, решая, является ли это действием прокрутки. Теперь доступны некоторые новые методы для отмены событий приземления после того, как UIScrollView
решит, что он прокручивается. Но, очевидно, это бесполезно, если код перетаскивания также начал перемещать подпредставление.
Мой вопрос: есть ли способ запретить iOS 7 UIScrollView
s вызывать низкоуровневые события касания в своих подвидах, когда вы инициируете действие прокрутки, поглаживая подвид? Когда я говорю «низкоуровневый», я имею в виду фактические события касания, а не использование распознавателей жестов. Я убежден, что просто установить для свойства delaysContentTouches
значение YES не получится.
Эта проблема полностью сломала довольно сложный код, который гладко и красиво работал в iOS 5 и 6; и до сих пор я не обнаружил способа сообщить UIScrollView
о подавлении событий в его подпредставлениях, пока он не определит, прокручивается он или нет. События проходят, затем позже запускается событие касания отмены, после того как вид прокрутки определяет, что он прокручивается. Похоже, что базовая модель была переопределена в худшую сторону, или это ошибка. Любая информация будет принята с благодарностью.