28823


ツールバー上で下へスワイプしたらツールバーを閉じるという処理を実装中です。  
Up,Left,Rightのスワイプは認識されるのですが、下スワイプだけが認識されません。  
原因または回避策等を教えてください。

[code]

        let gesSwipe = UISwipeGestureRecognizer(target: self, action: #selector(self.swipeDown(_:)))
        gesSwipe.direction = .Down
        self.navigationController!.toolbar.addGestureRecognizer(gesSwipe)
    
[/code]


CC BY-SA 3.0
2016-09-10T12:13:05.947
28807
2016-09-11T12:54:39.083
14125
question
swift
ツールバーのスワイプダウンイベントが認識されない


実際にiOSシミュレータで実験してみたところ、おっしゃるとおり、ダウンスワイプだけ反応がありませんでした。推測にすぎませんが、ツールバーの高さでは、スワイプと検知できるだけの移動量が確保できていないのではないでしょうか？  
`UISwipeGestureRecognizer`でなく、代わりに`UIPanGestureRecognizer`を使ってみてはいかがでしょうか？

[code]

    import UIKit
    
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            if let toolBar = navigationController?.toolbar {
                // panGestureRecognizerをツールバーに組み込み。
                let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(ViewController.panGesture(_:)))
                toolBar.addGestureRecognizer(panGestureRecognizer)
            }
        }
    
        func panGesture(recognizer: UIPanGestureRecognizer) {
            // ツールバーの中で、指の移動（パン）が生じたら、
            if recognizer.state == .Changed {
                // 移動速度を取得し、縦方向の速度が下向きに正だったら、
                if recognizer.velocityInView(self.view).y > 0 {
                    print("Down")
                } else { // 負だったら、
                    print("Up")
                }
            }
        }
    
    }
    
[/code]

これで、下向きのスワイプと、上向きのスワイプを検出できます。  
（このコードのままでは、横向きのスワイプでも反応しますし、指を画面から離すまで、繰り返し`panGesture`メソッドが呼ばれます。実用にするなら、さらに手を加える必要があります）


CC BY-SA 3.0
2016-09-11T12:54:39.083
28823
2016-09-11T12:54:39.083
18540
28807
answer