LoginSignup
35
33

More than 5 years have passed since last update.

UISwipeGestureRecognizerの罠と左右スワイプの実装

Last updated at Posted at 2016-02-17

「罠」というと大げさに聞こえるかもしれないが、かなり長い事解決に悩まされた。
僕のように誰かがハマらないように祈って寄稿

その罠とは

SwipeGestureはデフォルトで右のスワイプしか検知しない

これを知らなかった・・・!

UISwipeGestureRecognizerはデフォルトでは右のスワイプしか検知しないため、例えば左のスワイプを検知したい時は以下のように実装しなければならない。


let swipeGestureRecog = UISwipeGestureRecognizer(self, "swipeGesture")
swipeGestureRecog.direction = .Left

疑問

ただswipeGestureの実装をしているコードをみていると、以下のようなコードに出くわす


func swipeGesture(sender: UISwipeGestureRecognizer) {
  if sender.direction == .Right {
  } else if sender.direction == .Left {
  }
}

もし右のスワイプしか検知しないのであればこのコードは有効でなく、左右のスワイプを検知したければスワイプジェスチャー2つをつける必要があることになる。
そんなめんどくさいわけないはずなので何か見逃しているかもしれない・・・

と思ったけどシンプルにめんどくさいようです。複数ジェスチャーで左右スワイプを認識したい方は

ごりごりに一つのジェスチャーで左右どちらも検知したい方は
http://good-morning-call.com/2012/05/06/uiswipegesturerecognizer%E3%81%A7%E5%85%A8%E6%96%B9%E5%90%91%E8%AA%8D%E8%AD%98%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/

追記 左右スワイプの簡単な実装(2016/02/17)

以下のような記述をすることで簡単に左右スワイプを認識することができるようです!


import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let rightSwipe = UISwipeGestureRecognizer(target: self, action: "didSwipe:")
        rightSwipe.direction = .Right
        view.addGestureRecognizer(rightSwipe)

        let leftSwipe = UISwipeGestureRecognizer(target: self, action: "didSwipe:")
        leftSwipe.direction = .Left
        view.addGestureRecognizer(leftSwipe)
    }

    final func didSwipe(sender: UISwipeGestureRecognizer) {

        if sender.direction == .Right {
            print("Right")
        }
        else if sender.direction == .Left {
            print("Left")
        }
    }
}

Sim_progra さんありがとうございます m(_ _)m

35
33
6

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
35
33