【问题标题】:Blur effect does not fill the entire View模糊效果不会填满整个 View
【发布时间】:2016-01-03 18:46:45
【问题描述】:

我有一个具有全屏 UIImageView 的视图控制器。当控制器加载时,我只是在整个屏幕上设置了模糊效果。 UIImageView 的内容模式设置为 scaleAspectFill。我这样设置模糊效果:

@IBOutlet weak var previewImage: UIImageView!

override func viewDidLoad() {
    super.viewDidLoad()
previewImage.image = userPhoto     
let blur = UIVisualEffectView(effect: UIBlurEffect(style: .Light))
blur.frame = self.view.bounds
previewImage.addSubview(blur)
}

当我在 iPhone 6 上测试应用程序时,我得到了以下结果:

右边有一个偏移量,我不知道为什么。如果下面的图片是正确全屏的,但我可以获得模糊效果以适应它...

****已编辑****

我直接将模糊效果应用到VC的视图,现在效果很好,但是我想知道为什么当我将子视图添加到UIImage视图时它不起作用...

【问题讨论】:

  • 何时调用此代码?可能在viewDidLoad
  • 是的,我调用viewDidLoad中的代码
  • 尝试在视图中调用它会出现框架而不是边界
  • 相同的输出,可能与 UIImageView 本身有关。我使用 autoLayout 来修复约束,使视图占据全屏,从而导致上下约束为 0,左右约束为 -20
  • 视图的边界是正确的,但你没有将它添加到视图中,而是添加到 previewImage

标签: ios iphone swift blur


【解决方案1】:

我在这里看到两个可能的问题:

  1. 视图未布置在viewDidLoad 舞台上。在这种情况下,您可以强制他们手动布局:

    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.layoutIfNeeded()
        ...
    }
    
  2. 您将子视图添加到previewImage,而不是根视图。你必须检查你的故事板,或者修复代码:

    override func viewDidLoad() {
         super.viewDidLoad()
         previewImage.image = userPhoto     
         let blur = UIVisualEffectView(effect: UIBlurEffect(style: .Light))
         blur.frame = self.view.bounds
         self.view.insertSubview(blur, aboveSubview: previewImage)
     }
    

【讨论】:

  • 我想在图像上添加表单和文本条目,这就是为什么我将模糊添加到 previewImage 而不是根视图。模糊完全符合第二种解决方案,但我所有的标签都模糊了..
  • 好的,我明白了。因此,您可以在图像和标签之间进行模糊处理。我将编辑我的答案。
【解决方案2】:

基于 @kelin 的回答。您甚至可以在界面构建器中的图像上方添加模糊效果。只需在界面构建器的对象部分中搜索Visual Effect View with Blur。然后在图像上方添加Visual Effect View 视图。它也可以通过Attributes inspector 完全定制。这样你就可以确保模糊将占据整个屏幕。从架构的角度来看也更干净,你不需要通过代码来配置你的视图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多