UITapGesture 在 Popup 上没有按预期工作 class

UITapGesture doesn't work as expected on Popup class

我创建了一个要在我的应用程序中使用的 Popup class,我想向黑色图层不透明度添加一个 UITapGestureRecognizer,当用户触摸弹出窗口之外时,此窗口会自动关闭。但是这个手势没有被识别出来。我给你看我的 Popup class

代码
class Popup {

let supView : UIView!
let blackVoile = UIView()

init(superView viewToInsert : UIView){

    self.supView = viewToInsert

    build()
}

private func build(){
    blackVoile.frame = supView.bounds
    blackVoile.layer.backgroundColor = UIColor.black.cgColor

    blackVoile.isUserInteractionEnabled = true
    let closeGesture = UITapGestureRecognizer(target: self, action: #selector(self.close))
    blackVoile.addGestureRecognizer(closeGesture)

}


func show(){
    supView.addSubview(blackVoile)
}

@objc func close(){
    print("close function")
    self.blackVoile.removeFromSuperview()
}
}

从未调用 close funcblackVoile UIView

上面没有其他覆盖层

这是我打电话给 class 的时候:

let newPopup = Popup(superView : self.view)
newPopup.show()

我是初学者,也许我们不能向没有 UIView 实例的 class 添加手势?

您的 opacity 有问题。如果我们将任何 opacity 设置为 zero,那么该视图将被视为隐藏视图。所以,你的 tapGesture 不工作。

更新

var newPopup : Popup!

override func viewDidLoad() {
    super.viewDidLoad()
    newPopup = Popup(superView : self.view)
    newPopup.show()
}

您的 supView 也需要启用 userInteraction。