我使用以下代码在 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 如下所示:
其中灰色区域是blurView(通常设置为Clear Color,仅出于描述目的此处设置为灰色。)
对于blurView下但在Xib内部的 View (橙色),hide()函数可以正常工作,但对于Xib View 下的 View (蓝色)则模糊效果依然存在。
启用模糊 (.isHidden = false, .alpha = 1)
模糊关闭 ((.isHidden = true, .alpha = 0)
关闭时模糊效果会减弱,但仍然存在。 我做错了什么?
提前致谢。
最佳答案
好的,明白了。
问题是我在 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/