UIGestureRecognizer и распознование жестов
Жесты в iOS распознаются экземпляром класса UIGestureRecognizer. Происходит это в два этапа:
- Создание экземпляра подкласса UIGestureRecognizer
- Добавления метода обработки распознаного жеста
// // proSwift.ru // @IBOutlet weak var pannableView: UIView { didSet { let recognizer = UIPanGestureRecognizer(target: self, action: “pan:”) pannableView.addGestureRecognizer(recognizer) } }
При инициализации pannableView мы создали экземпляр UIPanGestureRecognizer, и указали что внутри нашего класса будет метод pan:, который будет обрабатывать жест «перетягивание»
// // proSwift.ru // func pan(gesture: UIPanGestureRecognizer) { switch gesture.state { case .Changed: fallthrough case .Ended: let translation = gesture.translationInView(pannableView) // обновить положение pannableView используя translation.x and translation.y  gesture.setTranslation(CGPointZero, inView: pannableView) default: break } }
Для того чтобы несколько жестов работали одновременно — например Pan и Rotate нужно сделать следующее:
- Указать соответствие протоколу для контроллера
// // proSwift.ru // class ViewController: UIViewController, UIGestureRecognizerDelegate {
2. Реализовать данные метод делегата:
// // proSwift.ru // func gestureRecognizer(UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer:UIGestureRecognizer) -> Bool { return true }
Состояния распознавания жестов описываются абстрактным классом UIGestureRecognizerState, и могут быть следующими:
// // proSwift.ru // var state: UIGestureRecognizerState { get } .Possible .Recognized .Began .Changed .Ended .Failed .Cancelled
Пример распознавания нажатия на произвольную view можно прочесть в статье Popover Controller на iPhone – пример создания из кода. ч.2
Добавить комментарий