UIGestureRecognizer и распознование жестов

Жесты в iOS распознаются экземпляром класса UIGestureRecognizer. Происходит это в два этапа:

  1. Создание экземпляра подкласса UIGestureRecognizer
  2. Добавления метода обработки распознаного жеста
//
// 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 нужно сделать следующее:

  1. Указать соответствие протоколу для контроллера
//
// 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

 

 

 

Метки:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.