动画 UIVisualEffectView 模糊半径?

Animating UIVisualEffectView Blur Radius?

正如标题所说,有没有办法为 UIVisualEffectView 的模糊半径设置动画?我在视图后面有一个动态背景,所以不能使用 ImageEffects 添加...据我所知,唯一可以做到这一点的是为不透明度设置动画,但 iOS 抱怨说这样做会破坏EffectView 所以这看起来绝对是个坏主意...任何帮助将不胜感激。

答案是肯定的。这是一个从无模糊到模糊的动画示例:

// When creating your view...
let blurView = UIVisualEffectView()
// Later, when you want to animate...
UIView.animateWithDuration(1.0) { () -> Void in
    blurView.effect = UIBlurEffect(style: .Dark)
}

这将使模糊半径在一秒钟内从零(完全透明,或者更确切地说 - 根本没有模糊效果)到默认半径(完全模糊)。并做反向动画:

UIView.animateWithDuration(1.0) { () -> Void in
    blurView.effect = nil
}

生成的动画平滑地变换模糊半径,即使您实际上 adding/removing 完全是模糊效果 - UIKit 只知道在幕后做什么。

请注意,这并非总是可行:直到最近(不确定何时),必须使用 UIVisualEffect 初始化 UIVisualEffectView,并且 effect 属性 是只读的。现在,effect 既是可选的又是 read/write(尽管文档未更新...),并且 UIVisualEffectView 包含一个空的初始化程序,使我们能够执行这些动画。

唯一的限制是您不能手动将自定义模糊半径分配给 UIVisualEffectView - 您只能在 'no blur' 和 'fully blurred' 之间设置动画。

编辑: 如果有人感兴趣,我创建了一个 UIVisualEffectView 的子类,让您可以完全控制模糊半径。需要注意的是,它使用私有 UIKit API,因此您可能不应该使用它提交应用程序以供审核。但是,它对于原型或内部应用程序仍然很有趣且有用: https://github.com/collinhundley/APCustomBlurView