Swift:手势识别器没有注册Taps

时间:2016-07-25 12:35:25

标签: ios swift xcode uigesturerecognizer uitapgesturerecognizer

我在让UITapGestureRecognizer注册用户的触摸时遇到了一些麻烦。 showMenu() 函数应该向用户显示部分透明的 blackView ,并且我已经实现了手势识别器,以便当用户点击 blackView 时,会调用 dismiss() 并使视图淡入淡出。

在我的XCode控制台中,我没有收到打印消息"被解雇"在代码中指定。

提前致谢!

func showMenu(){
    print("show")

    if let window = UIApplication.sharedApplication().keyWindow{

        blackView.backgroundColor = UIColor(white: 0, alpha: 0.5)

        blackView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(dismiss)))

        window.addSubview(blackView)
        blackView.frame = window.frame
        blackView.alpha = 0

        //Added this line 
        blackView.userInteractionEnabled = true

        UIView.animateWithDuration(0.5){
            self.blackView.alpha = 1
        }
    }
}

func dismiss(){
    print("dismiss")

    UIView.animateWithDuration(0.5){
        self.blackView.alpha = 0
    }
}

编辑:我已经检查过使用“查看层次结构调试”工具查看是否有任何视图窃取了点击,但似乎并不是之上的任何内容blackView ,我还明确设置 blackView 以允许用户互动。

编辑:“视图层次结构调试”界面的屏幕截图。

2 个答案:

答案 0 :(得分:4)

如果您将Alpha视图更改为零,则会停止获取触摸事件。

您可以尝试将视图的背景颜色更改为透明,而不是更改视图的alpha,这样您的视图就不可见并且您可以获得事件

答案 1 :(得分:1)

将此添加到您的代码中。它识别是否有1次触摸,然后你可以调用你的解雇方法。

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

    let touch = touches.first?.tapCount
    if touch == 1 {
        // Call Dismiss
        dismiss()
    }
}