【问题标题】:How create transparent view with with blur effect?如何创建具有模糊效果的透明视图?
【发布时间】:2021-03-06 09:07:39
【问题描述】:

我学习了如何创建 UI,并在 www 中找到了我想自己重复的设计。我可以创建主视图,然后添加带有所有元素的子视图,如下例所示,但我无法创建具有模糊效果的子视图,如示例,我正在尝试创建子视图,然后添加其他视图和平并添加模糊,但我可以以创建副本为例。

创建此视图的正确方法是什么?我不明白我需要对视图进行哪种操作才能获得这种效果,这是一种具有 alpha 视图和模糊效果的技巧还是其他什么?

【问题讨论】:

  • 你在使用 VisualEffectView 吗?
  • 对于这个子视图,我尝试创建 UIView,然后添加带有 alpha 的红色 UIView,然后尝试添加视觉效果视图,但它不起作用:(

标签: ios swift uiview blur alpha


【解决方案1】:

我找到了一个很好的教程,它可以帮助您创建具有模糊效果的平滑透明视图:https://www.raywenderlich.com/167-uivisualeffectview-tutorial-getting-started

【讨论】:

【解决方案2】:

我使用下一个方法解决了这个任务:

首先:为子视图创建了渐变层。

第二个:添加了带有 VibrancyEffect 的 UIVisualEffectView。

如何创建渐变使用来自本网站的信息 (https://www.appcoda.com/cagradientlayer/)

并且使用了这个项目的源代码(https://github.com/ide/UIVisualEffects

我的源代码:

func createGradientLayer() {
    gradientLayer = CAGradientLayer()
    gradientLayer.cornerRadius = 10
    gradientLayer.frame = self.placeholder.bounds
    gradientLayer.locations = [0.0, 0.35]
 
    gradientLayer.colors = [UIColor.blue.cgColor, UIColor.white.cgColor]
 
    self.placeholder.layer.addSublayer(gradientLayer)
}

override func viewDidLoad() {
    super.viewDidLoad()

    createGradientLayer()


    let lightBlur = UIBlurEffect(style: .light)
    let lightBlurView = UIVisualEffectView(effect: lightBlur)
    lightBlurView.layer.cornerRadius = 10
    lightBlurView.layer.masksToBounds = true
    
    placeholder.addSubview(lightBlurView)
    
    lightBlurView.frame.size.height = placeholder.frame.size.height
    lightBlurView.frame.size.width = placeholder.frame.size.width

    let lightVibrancyView = vibrancyEffectView(forBlurEffectView: lightBlurView)
    lightBlurView.contentView.addSubview(lightVibrancyView)
    
}

   fileprivate func vibrancyEffectView(forBlurEffectView blurEffectView:UIVisualEffectView) -> UIVisualEffectView {
        let vibrancy = UIVibrancyEffect(blurEffect: blurEffectView.effect as! UIBlurEffect)
        let vibrancyView = UIVisualEffectView(effect: vibrancy)
        vibrancyView.frame = blurEffectView.bounds
        vibrancyView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        return vibrancyView
    }

最后一个例子:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    • 2016-11-18
    • 1970-01-01
    相关资源
    最近更新 更多