LoginSignup
13

More than 5 years have passed since last update.

UIGestureRecognizer の種類

Last updated at Posted at 2016-06-13

今日学んだことの共有です。

あるViewの「タップの開始」と「タップの終了」を検知するということをしたかったのですが、UITapGestureRecognizerを使って実現しようとしたところUIGestureRecognizerState.Endedの時しか設定したメソッドが呼ばれず、「タップの開始」時にやりたい処理ができませんでした。

少し調べたところ、UIGestureRecognizerにはDiscrete GestureContinuous Gestureの2種類あることがわかりました。
(参考)Event Handling Guide for iOS

Discrete Gesture

一度しか呼ばれないジェスチャです。以下の2種類があります。
試したところ、指を離したときに呼ばれました。(state.Endedでした)

  • UITapGestureRecognizer
  • UISwipeGestureRecognizer

Continuous Gesture

名前の通り連続して呼ばれるジェスチャです。以下の4種類があります。
正常に動作した場合、stateが順に.Began.Changed(複数回繰り返し)、.Endedと変わります。

  • UIPinchGestureRecognizer
  • UIPanGestureRecognizer
  • UIRotationGestureRecognizer
  • UILongPressGestureRecognizer

今回やりたかったことの実現

今回やりたかったのは、UIViewをタップ中はviewの色を変え、指を離した際に色を戻すと同時に別の処理をするということでした。
UITapGestureRecognizerでは実現できなかったので、UILongPressGestureRecognizerminimumPressDurationを0にして実現しました。

swift
    func setup() {
        let gesture = UILongPressGestureRecognizer(target: self, action: #selector(tapped))
        gesture.minimumPressDuration = 0
        myView.addGestureRecognizer(gesture)
    }

    func tapped(recognizer: UILongPressGestureRecognizer) {
        switch recognizer.state {
        case .Began:
            myView.backgroundColor = UIColor.redColor()
            print("Began")
        case .Ended:
            myView.backgroundColor = UIColor.blueColor()
            print("Ended")
        default:
            myView.backgroundColor = UIColor.blueColor()
            print("default")
        }
    }

以上になります。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13