UITapGestureRecognizer tap on self.view but ignore subviews

后端 未结 12 804
佛祖请我去吃肉
佛祖请我去吃肉 2020-11-30 21:49

I need to implement a feature that will invoke some code when I double tap on the self.view (view of UIViewCotroller). But the problem that I have other UI obje

12条回答
  •  执念已碎
    2020-11-30 22:17

    Complete swift solution (delegate must be implemented AND set for recognizer(s) ):

    class MyViewController: UIViewController UIGestureRecognizerDelegate {
    
        override func viewDidLoad() {
            let doubleTapRecognizer = UITapGestureRecognizer(target: self, action: #selector(onBaseTapOnly))
            doubleTapRecognizer.numberOfTapsRequired = 2
            doubleTapRecognizer.delegate = self
            self.view.addGestureRecognizer(doubleTapRecognizer)
        }
    
        func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {
            if touch.view.isDescendantOfView(self.view){
                return false
            }
            return true
        }
    
        func onBaseTapOnly(sender: UITapGestureRecognizer) {
            if sender.state == .Ended {
                //react to tap
            }
        }
    }
    

提交回复
热议问题