Ответ
UIGestureRecognizer — это абстрактный базовый класс в UIKit, который инкапсулирует логику распознавания конкретного жеста (тап, свайп, пинч). Он добавляется к UIView и уведомляет целевой объект при распознавании жеста, избавляя от необходимости обрабатывать низкоуровневые touch-события вручную.
Основные подклассы (конкретные распознаватели):
UITapGestureRecognizer— Одно или несколько касаний.UIPanGestureRecognizer— Перетаскивание (panning).UIPinchGestureRecognizer— Сведение/разведение пальцев (масштабирование).UIRotationGestureRecognizer— Вращение двумя пальцами.UISwipeGestureRecognizer— Быстрый свайп в определённом направлении.UILongPressGestureRecognizer— Долгое нажатие.
Пример добавления обработчика тапа:
let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTap(_:)))
tapRecognizer.numberOfTapsRequired = 1 // Одинарный тап
tapRecognizer.numberOfTouchesRequired = 1 // Одним пальцем
myView.addGestureRecognizer(tapRecognizer)
@objc func handleTap(_ sender: UITapGestureRecognizer) {
let location = sender.location(in: sender.view)
print("Тап распознан в точке: (location)")
}
Дополнительные возможности:
- Состояние жеста: Распознаватель проходит через состояния (
.began,.changed,.ended,.cancelled), что полезно для непрерывных жестов (pan, pinch). - UIGestureRecognizerDelegate: Позволяет тонко управлять поведением (одновременное распознавание нескольких жестов, условие начала распознавания).
- Зависимости жестов: Можно сделать так, чтобы один жест требовал неудачи другого (
require(toFail:)).