在我的应用中,我有一个视图控制器,该视图具有附加的tapGesture识别器。
tapGesture对隐藏的视图(某种面板)进行了动画处理,该视图变得可见。该视图包含一个按钮,该按钮可以执行一些操作,然后隐藏面板。
但是似乎由于手势附加到了视图构建者的视图上,所以未检测到按钮上的触摸,仅触发了视图控制器视图上的点击。
我尝试过与firstResponder一起玩,但似乎不起作用
func addGesture(){
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(togglePanel))
myView.addGestureRecognizer(tapGesture)
}
我的面板像这样插入:
insertSubview(actionPanel, at: 0)
我的按钮
actionPanel.addSubview(dismissBtn)
按钮动作
dismissBtn.addTarget(self, action: #selector(hideActionPanel), for: .touchUpInside)
@objc func hideActionPanel(){
print("tapped")
}
答案 0 :(得分:0)
似乎无效的按钮
使用xcode运行应用,使用Xcode“调试视图层次结构”
此按钮或其超级视图可能是.userInteractionEnabled = false
我假设您的动画图像是超级视图,并且该图像默认情况下会关闭用户交互
添加此xxImage.userInteractionEnabled = true
答案 1 :(得分:0)
您可以将UIGestureRecognizerDelegate
添加到您的班级中。要了解更多信息,请访问UIGestureRecognizerDelegate。
然后实施func gestureRecognizer(UIGestureRecognizer, shouldReceive: UITouch) -> Bool
。每当手势即将发生时都会调用此函数。如果您想确切了解其工作原理,请点击gestureRecognizer。
不要忘了像这样将手势与代表联系起来。
tapGesture.delegate = self
最后,在UIGestureRecognizerDelegate函数内部,检查被触摸的视图是否等于具有gestureRecognizer的视图。这将阻止任何基础视图识别手势。
if touch.view == gestureRecognizer.view {
return true
}
return false