いつも忘れて検索するのでメモ
-
最初に結論
- singleTapGesture.require(toFail: doubleTapGesture) を実行する。
-
サンプルコード
- require toFail が追加される以外は通常と同じ。
共存// シングルタップの GestureRecognizer を someView に追加する。 let singleTapGesture = UITapGestureRecognizer(target: self, action: #selector(MyViewController.onTap(gesture:))) singleTapGesture.numberOfTapsRequired = 1 someView.addGestureRecognizer(singleTapGesture) // ダブルタップの GestureRecognizer を someView に追加する。 let doubleTapGesture = UITapGestureRecognizer(target: self, action: #selector(MyViewController.onTap(gesture:))) doubleTapGesture.numberOfTapsRequired = 2 someView.addGestureRecognizer(doubleTapGesture) // 両方を有効にするために必要 singleTapGesture.require(toFail: doubleTapGesture)
- セレクタはそれぞれの GestureRecognizer で分けるのもありだが、同一にする場合は gesture.numberOfTapsRequired で判定。
セレクタの例@objc fileprivate func onTap(gesture: UITapGestureRecognizer) { if gesture.numberOfTapsRequired == 1 { // シングルタップ時の動作 } else if gesture.numberOfTapsRequired == 2 { // ダブルタップ時の動作 } }
-
補足
- 逆
doubleTapGesture.require(...
だと正しく動作しない。 -
singleTapGesture.require(...
とdoubleTapGesture.require(...
の両方があってもだめ。
正しく動かない例(略) singleTapGesture.require(toFail: doubleTapGesture) // 必要 doubleTapGesture.require(toFail: singleTapGesture) // 不要・あると動かない。
- 逆