UIVisualEffect 未在 UIView 上显示

Posted

技术标签:

【中文标题】UIVisualEffect 未在 UIView 上显示【英文标题】:UIVisualEffect is not showing on UIView 【发布时间】:2017-01-05 18:59:05 【问题描述】:

我有一个UIView 并以编程方式创建,然后我将subView 添加到我的viewController.view 中。但是,视图不受模糊的影响。 这是我的代码:

let blurryView: UIView = 
    let blur = UIView()
    blur.backgroundColor = UIColor.yellow
    blur.alpha = 0.90
    let blurEffect = UIBlurEffect(style: .extraLight)
    let blurEffectView = UIVisualEffectView(effect: blurEffect)
    blur.addSubview(blurEffectView)
    blurEffectView.center = blur.center
    blurEffectView.frame = blur.bounds
    blur.translatesAutoresizingMaskIntoConstraints = false
    return blur
()

func manageBlurView() 
    blurryView.widthAnchor.constraint(equalToConstant: 250).isActive = true
    blurryView.heightAnchor.constraint(equalToConstant: 250).isActive = true
    blurryView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    blurryView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true


override func viewDidLoad() 
    super.viewDidLoad()

    view.addSubview(blurryView)
    manageBlurView()


添加了模糊效果,我使用breakpoints 和品脱语句if blur.subviews == [blurEffectView] print("Blur effect added as a subview") 仔细检查并打印出来。 我有一张背景图片来确定它是否模糊。 我还尝试在viewDidLoad() 中添加模糊效果,但没有任何反应。

【问题讨论】:

【参考方案1】:

将黄色背景视图和模糊视图直接添加为主视图的子视图:

    let backg = UIView(frame: self.view.frame)
    backg.backgroundColor = UIColor.yellow
    backg.alpha = 0.90

    self.view.addSubview(backg)

    // the blur effect
    let blurEffect = UIBlurEffect(style: .extraLight)
    let blurredEffectView = UIVisualEffectView(effect: blurEffect)

    blurredEffectView.frame = self.view.frame
    self.view.addSubview(blurredEffectView)

你可以把上面的代码放在viewDidLoad.

【讨论】:

感谢您的帮助。我不知道我为什么要这样做。我正在处理约束,因此我可以轻松地重新约束并移动它们。

以上是关于UIVisualEffect 未在 UIView 上显示的主要内容,如果未能解决你的问题,请参考以下文章

MonoTouch - UIView.Animate 完成回调未在按钮 touchUpInside 委托内调用

在 UIVisualEffect 视图上创建一个透明孔

UIScrollView 内的 UIView 未在 3,5 英寸屏幕 iOS 上调整大小

UIView drawRect 未在自动旋转时调用

以编程方式分配的 UIView 未在我给出的 x 和 y 处分配。超越这一点。

UIView touchesEnded 事件未在第一次点击时调用,但在再次点击时调用