ios - 模糊效果子层不会随着 xib 消失

标签 ios swift xib blur

我使用以下代码在 View 上实现模糊效果(使用 Swift 4.1、Xcode 9.3):

myXib - 加载 Nib View 并添加模糊 subview

func setup() {
    // load xib view
    Bundle.main.loadNibNamed("myXib", owner: self, options: nil)
    self.view.frame = bounds
    self.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    self.addSubview(self.view)

    // create blur effect
    let blurEffect = UIBlurEffect(style: .light)
    let blurEffectView = UIVisualEffectView(effect: blurEffect)
    blurEffectView.frame = blurView.bounds
    blurView.translatesAutoresizingMaskIntoConstraints = false
    blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    blurView.insertSubview(blurEffectView, at: 0)
    isBlurShowing = true
}

我使用一个简单的切换按钮来调用 show() 或 hide() 函数。

func hide() {
    blurView.isHidden = true
    blurView.alpha = 0
    isBlurShowing = false
}

func show() {
    blurView.isHidden = false
    blurView.alpha = 1
    isBlurShowing = true
}

示例 myXib 如下所示:

enter image description here

其中灰色区域是blurView(通常设置为Clear Color,仅出于描述目的此处设置为灰色。)

对于blurView下但在Xib内部的 View (橙色),hide()函数可以正常工作,但对于Xib View 的 View (蓝色)则模糊效果依然存在。

启用模糊 (.isHidden = false, .alpha = 1)

blur on

模糊关闭 ((.isHidden = true, .alpha = 0)

enter image description here

关闭时模糊效果会减弱,但仍然存在。 我做错了什么?

提前致谢。

最佳答案

好的,明白了。

问题是我在 0 处创建了第二个模糊层,因为我也在 init 函数中通过以下方式调用它:

override init (frame : CGRect) {
    super.init(frame: frame)
    setup()
}

required init? (coder aDecoder : NSCoder) {
    super.init(coder: aDecoder)
    setup()
}

一旦我删除了这些,代码就可以正常运行。

关于ios - 模糊效果子层不会随着 xib 消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50201197/

相关文章:

ios - UITableViewCell 中的 UILabel 不显示带有特殊符号的文本,例如 "å"

iphone - 发送到实例的无法识别的选择器

具有不同数组类型的 Swift Codable

uiview - iOS 的 slider View

ios - 尝试对导航 Controller 进行子类化,以便在 iOS 中的横向模式下使用单独的 .xib 文件加载外部 View Controller

ios - 为什么在使用 GKMatchSendDataReliable 时会丢失数据包?

ios - UIImageView分配后未更改

ios - 减小 iOS 应用程序文件大小

swift - 如何捕获自定义 UICollectionViewCell 的 didSelectItemAt

ios - XIB 的内容未加载