正如标题所述,有没有一种方法可以动画化UIVisualEffectView的模糊半径?我在视图后面有一个动态背景,因此无法使用ImageEffects添加……据我所知,唯一能做到这一点的是动画化不透明度,但iOS会抱怨说这样做会破坏EffectView,所以绝对不是好主意...任何帮助将不胜感激。
正如标题所述,有没有一种方法可以动画化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
}
生成的动画会平滑地改变模糊半径,即使你实际上正在完全添加/删除模糊效果 - UIKit 在幕后知道该如何处理。
请注意,这并不总是可能的: 直到最近(不确定是什么时候),UIVisualEffectView 必须使用 UIVisualEffect 进行初始化,并且 effect 属性是只读的。现在,effect 变成了可选和可读/写(尽管文档没有更新...),并且 UIVisualEffectView 包括一个空的初始化程序,使我们能够执行这些动画。
唯一的限制是无法手动分配自定义模糊半径给 UIVisualEffectView - 你只能在'无模糊'和'完全模糊'之间进行动画。
编辑:如果有人感兴趣,我创建了一个UIVisualEffectView
的子类,可以完全控制模糊半径。但需要注意的是它使用了一个私有的UIKit
API,因此您可能不应该使用它提交审核应用。然而,对于原型或内部应用程序来说,它仍然是有趣和有用的:
https://github.com/collinhundley/APCustomBlurView