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)numberOfTouchesRequired
let swipeRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipe))
swipeRecognizer.direction = .left
view.addGestureRecognizer(swipeRecognizer)
translation(in:)
(смещение относительно точки)velocity(in:)
(скорость движения)minimumPressDuration
(по умолчанию 0.5 сек)allowableMovement
(допустимое смещение)UIGestureRecognizerDelegate
gestureRecognizer(_: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?) {
// Логика распознавания кругового жеста
}
}
Оптимизация производительности:
cancelsTouchesInView
delaysTouchesBegan/Ended
для приоритетной обработкиЛучшие практики:
.ended
для подтвержденных жестовstate
при обработке непрерывных жестов UIGestureRecognizer
предоставляет удобный высокоуровневый API для обработки пользовательских жестов. В iOS доступны распознаватели для всех основных типов жестов, поддерживается кастомизация и сложные взаимодействия между жестами. Для нетривиальных сценариев можно создавать собственные подклассы распознавателей.