Как UIScrollView крадет касания из своих подпредставлений?

Я хотел бы смочь создать свои собственные контейнерные подклассы UIView, который может реагировать сначала на касания перед их подпредставлениями. Это хитро, потому что обычно подпредставление получает сенсорные события (через touchesBegan: и т.д.) перед суперпредставлениями. Как UIScrollView инвертирует это?

Чтобы быть ясным, я не спрашиваю, как UIScrollView ведет себя. Я понимаю то, что это делает, и как Вы обычно использовали бы его. Я спрашиваю о том, как я мог чисто реализовать свою собственную версию этого - не потому что я хочу, но потому что я пытаюсь создать допускающие повторное использование контейнерные представления, которые используют в своих интересах подобное поведение.

5
задан Tyler 18 March 2010 в 17:44
поделиться

2 ответа

Вы можете реализовать метод hitTest: withEvent: в своем Подкласс UIView .

Этот метод вызывается, чтобы проверить, какое подпредставление должно получить событие касания, чтобы вы могли выполнить какое-то действие до того, как оно действительно произойдет. Вы также можете изменить подпредставление, которое должно получать событие.

13
ответ дан 18 December 2019 в 09:06
поделиться

[ Изменить: Хорошо, я каким-то образом прочитал вопрос как прямо противоположный тому, который был задан на самом деле. Я оставлю это здесь на случай, если кому-то будет любопытно, но это не имеет отношения к фактическому вопросу - TechZen]

Вид прокрутки перемещается как по горизонтали, так и по вертикали, поэтому он должен пробовать все прикосновения, чтобы увидеть, действительно ли они прокрутка касаний.

Например, у вас есть ползунок в режиме прокрутки, который прокручивается по горизонтали. Пользователь касается ползунка. Это касание предназначено для перемещения ползунка или это начало горизонтальной прокрутки? Что должно иметь приоритет?

Несмотря на то, что программно цепочка респондентов перемещается от самого нижнего обзора (наиболее визуально вверху) вверх по цепочке, пока не найдет объект, который имеет с ним дело, за кулисами обработка местоположения касания идет от самого верхнего обзора ( которое является окном приложения) вниз. Большинство представлений просто пересылают эту информацию подпредставлениям, которые затем активируются, а затем отправляют событие по цепочке респондента для обработки. Поскольку прокрутка всего представления является особым событием, которое на самом деле не относится к обычной цепочке респондентов, scrollview перехватывает проход вниз по местоположению касания, чтобы определить, нужно ли ему прокручивать, прежде чем передавать местоположения касания в подвиды.

3
ответ дан 18 December 2019 в 09:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: