Вопрос проверяет понимание жизненного цикла жестов и побочных эффектов их распознавания.
Когда один gesture recognizer успешно распознан, остальные конфликтующие жесты переводятся в состояние failed или cancelled. Они перестают получать события и не срабатывают. Некоторые жесты могут продолжить работу, если разрешено одновременное распознавание. Это поведение напрямую влияет на то, какие события дойдут до view.
Распознавание жеста — это точка, в которой UIKit принимает окончательное решение и “закрывает гонку” между жестами.
recognizedКогда жест переходит в состояние recognized:
UIKit считает его победителем
все жесты, которые не могут работать одновременно:
переводятся в failed
перестают анализировать touches
Если жест поддерживает непрерывное состояние (например, pan):
он остаётся активным до ended или cancelled
Одновременное распознавание возможно, если:
делегат вернул true в shouldRecognizeSimultaneouslyWith
жесты не конфликтуют логически
Типичный пример:
pan внутри scroll view + кастомный жест аналитики
После распознавания жеста:
view может перестать получать touchesMoved
cancelsTouchesInView может отменить touches у view
responder chain больше не участвует в обработке этого ввода
Если не учитывать это поведение:
кнопки “не нажимаются”
scroll перестаёт работать
жесты ведут себя нестабильно
Когда один gesture recognizer распознан, UIKit завершает конкуренцию: остальные жесты либо отменяются, либо продолжают работу только при явном разрешении. Управление этим процессом — ключ к стабильным жестам.