Ответ
Да, UIGestureRecognizer интегрирован в систему событий UIResponder, но перехватывает и обрабатывает события касаний до того, как они достигнут стандартных методов UIResponder (таких как touchesBegan(_:with:)).
Последовательность обработки касания:
- Система (
UIApplication->UIWindow) отправляет объектыUITouchв цепочку responder'ов. - Прикреплённые к view
UIGestureRecognizerанализируют поток касаний. - Если распознаватель определяет свой жест, он:
- Вызывает свой целевой метод (
action). - По умолчанию (
cancelsTouchesInView = true) отменяет дальнейшую доставку этого касания методам view (touchesBeganи др.).
- Вызывает свой целевой метод (
- Если жест не распознан или свойство
cancelsTouchesInView = false, события касаний передаются дальше по цепочкеUIResponder.
Пример настройки:
let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTap))
tapRecognizer.cancelsTouchesInView = false // Позволяет touchesBegan также получить событие
view.addGestureRecognizer(tapRecognizer)