Вопрос проверяет понимание архитектуры жестов и различий между обработкой событий и распознаванием жестов.
Gesture recognizers существуют параллельно responder chain и не являются её частью. Они анализируют поток touch-событий, но не обрабатывают их напрямую. Это позволяет жестам конкурировать, отменяться и распознаваться независимо от того, какая view является first responder. Такое разделение делает систему жестов более гибкой.
UIKit специально разделяет обработку событий и распознавание жестов, чтобы не перегружать responder chain и избежать жёстких зависимостей.
Gesture recognizer — объект, который анализирует последовательность touch-событий и определяет, соответствует ли она определённому жесту.
Если бы gesture recognizers были частью responder chain:
они жёстко зависели бы от порядка responder’ов
было бы сложно реализовать конкуренцию жестов
отмена жестов стала бы хаотичной
Отдельная система решает эти проблемы.
Фактический процесс выглядит так:
Touch-событие найдено через hit-testing
Событие передаётся view
Все gesture recognizers, привязанные к view и её родителям:
получают события
анализируют последовательность
Жест либо:
распознаётся
отменяется
переходит в failed
При этом responder chain:
продолжает существовать
не “знает” о логике распознавания жестов
Такое разделение позволяет:
нескольким жестам анализировать одни и те же touch-события
гибко управлять приоритетами
отменять touches у view (cancelsTouchesInView)
Пытаться “поймать” жест через responder chain. Жесты никогда туда не попадают — они работают на другом уровне абстракции.
Gesture recognizers не входят в responder chain, потому что они не обрабатывают события, а распознают паттерны ввода. Это архитектурное разделение делает систему жестов гибкой и управляемой.