我有一个弹出的UIView作为控制窗口。包含AudioKitUI框架中的滑块和按钮。我设置了触摸点击手势以关闭“弹出”视图,但是当我点击按钮时,它当然也关闭了UIview。按下AKButton时是否可以忽略点击手势?
所有内容都包含在其自己的类结构中。这是我的Overide Init顶部的手势代码。
override init(frame: CGRect) {
super.init(frame: frame)
self.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(animateout)))
以及我的AKButton的代码。
// Dynamics on/off button
let dynamicsButton = AKButton(title: "") { button in
if boxDynamicStatus[boxBloqDoubleTapped] == false {
button.title = "FLOATING"
boxDynamicStatus[boxBloqDoubleTapped] = true
boxBloqArray[boxBloqDoubleTapped].physicsBody?.isDynamic = true
} else {
boxDynamicStatus[boxBloqDoubleTapped] = false
button.title = "FIXED"
boxBloqArray[boxBloqDoubleTapped].physicsBody?.isDynamic = false
}
}
// Set button text from box array
if boxDynamicStatus[boxBloqDoubleTapped] == false {
dynamicsButton.title = "FIXED"
} else {
dynamicsButton.title = "FLOATING"
}
我猜想的滑块没有这个问题,因为它是移动手势而不是轻敲。
所有按钮/滑块均位于容器中
fileprivate let container: UIView = {
let v = UIView()
v.translatesAutoresizingMaskIntoConstraints = false
v.backgroundColor = UIColor.black.withAlphaComponent(0.3)
v.layer.cornerRadius = 5
return v
}()
可以将手势编程为不在容器边界内注册吗?
我认为这实际上可能是与此处相同的问题:Prevent click through view in swift
因此,可以通过视图的z-index顺序解决。如果您提供了代码的工作版本或某些游乐场版本,我可以进行测试,但这是我所建议的最好信息。