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