我通过使用布尔条件定义了VisualEffectView。在这种情况下,当按下按钮时,将使用active: true调用此函数

func addVisualEffectView(active: Bool) {
    let blurEffect = UIBlurEffect(style: .dark)
    let blurEffectView = UIVisualEffectView(effect: blurEffect)
    if active {
        blurEffectView.alpha = 0.5
        blurEffectView.frame = self.view.frame
        self.view.insertSubview(blurEffectView, at: 2)
    } else {
        blurEffectView.removeFromSuperview()
    }
}

在另一个按钮中,此函数用active: false再次调用,应该从屏幕上删除VisualEffectView子视图,但不会。您能帮我,告诉我问题出在哪里吗?

最佳答案

如果添加了一次,然后再次调用函数,它将不会删除以前添加的视图,只会添加新的UIVisualEffectView
您需要能够通过继续使用其tag属性来跟踪创建的视图。

func addVisualEffectView(active: Bool) {
    if active {
        let blurEffect = UIBlurEffect(style: .dark)
        let blurEffectView = UIVisualEffectView(effect: blurEffect)
        blurEffectView.alpha = 0.5
        blurEffectView.frame = self.view.frame
        blurEffectView.tag = 332211
        self.view.insertSubview(blurEffectView, at: 2)
    } else {
        self.view.viewWithTag(332211)?.removeFromSuperview()
    }
}

关于ios - 从 subview 中删除VisualEffectView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54975360/

10-13 02:24