模糊效果不会填满整个视图

时间:2016-01-03 18:46:46

标签: ios iphone swift blur

我有一个View控制器,它具有全屏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上测试应用程序时,我得到了这个结果:

Iphone Screen Capture

右边有一个偏移,我无法弄清楚原因。下面的图片是否已正确完全屏蔽,但我可以获得模糊效果以适应它...

****已编辑****

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

2 个答案:

答案 0 :(得分:5)

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

  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)
     }
    

答案 1 :(得分:0)

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

See this example