我在让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 以允许用户互动。
编辑:“视图层次结构调试”界面的屏幕截图。
答案 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()
}
}