【问题标题】:Blur effect sublayer does not disappear with xib模糊效果子层不会随着xib消失
【发布时间】:2018-05-06 15:07:47
【问题描述】:

我正在使用以下代码对视图(使用 Swift 4.1、Xcode 9.3)实现模糊效果:

myXib - 加载 nib 视图并添加模糊子视图

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 示例如下所示:

其中灰色区域为blurView(一般设置为Clear Color,此处仅设置为灰色用于描述目的。)

对于 blurView 下但 Xib 内部的视图(橙色), hide() 函数正常工作,但对于 在 Xib 视图下 的视图(蓝色)模糊效果依旧。

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

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

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

提前致谢。

【问题讨论】:

    标签: ios swift xib blur


    【解决方案1】:

    好的,想通了。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-23
      • 2012-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多