UIGestureRecognizer — это абстрактный класс в UIKit, который распознает определенные жесты пользователя (тапы, свайпы, пинчи и др.) и преобразует их в действия. Это мощный механизм для обработки пользовательского ввода без необходимости работать с низкоуровневыми touch-событиями.
numberOfTapsRequired (по умолчанию 1)numberOfTouchesRequired (количество пальцев)let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTap))
tapRecognizer.numberOfTapsRequired = 2
view.addGestureRecognizer(tapRecognizer)
scale (текущий масштаб)velocity (скорость жеста)rotation (угол в радианах)velocity (скорость вращения)direction (up/down/left/right)numberOfTouchesRequiredlet swipeRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipe))
swipeRecognizer.direction = .left
view.addGestureRecognizer(swipeRecognizer)
translation(in:) (смещение относительно точки)velocity(in:) (скорость движения)minimumPressDuration (по умолчанию 0.5 сек)allowableMovement (допустимое смещение)UIGestureRecognizerDelegategestureRecognizer(_:shouldRecognizeSimultaneouslyWith:)func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,
shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
require(toFail:) — отложить распознавание одного жеста до провала другогоsingleTapRecognizer.require(toFail: doubleTapRecognizer)
.possible — готов к распознаванию.began — жест начался.changed — жест изменился (для непрерывных жестов).ended — жест успешно завершен.cancelled — жест отменен.failed — жест не распознанМожно создавать свои подклассы для распознавания специализированных жестов:
class CircleGestureRecognizer: UIGestureRecognizer {
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
// Логика распознавания кругового жеста
}
}
Оптимизация производительности:
cancelsTouchesInViewdelaysTouchesBegan/Ended для приоритетной обработкиЛучшие практики:
.ended для подтвержденных жестовstate при обработке непрерывных жестов UIGestureRecognizer предоставляет удобный высокоуровневый API для обработки пользовательских жестов. В iOS доступны распознаватели для всех основных типов жестов, поддерживается кастомизация и сложные взаимодействия между жестами. Для нетривиальных сценариев можно создавать собственные подклассы распознавателей.