正如标题所说,有没有办法为 UIVisualEffectView 的模糊半径设置动画?我在视图后面有一个动态背景,所以不能使用 ImageEffects 添加...据我所知,唯一可以做到这一点的是动画不透明度,但 iOS 抱怨说这样做会破坏 EffectView 所以它肯定似乎是个坏主意...任何帮助将不胜感激。
1 回答
答案是肯定的。这是从无模糊 -> 模糊制作动画的示例:
// 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 只知道在幕后做什么。
请注意,这并不总是可能的:直到最近(不确定何时),必须使用 UIVisualEffect 初始化 UIVisualEffectView,并且该effect
属性是只读的。现在,effect
它既是可选的,又是读/写的(尽管文档没有更新......),并且 UIVisualEffectView 包含一个空的初始化程序,使我们能够执行这些动画。
唯一的限制是您不能手动将自定义模糊半径分配给 UIVisualEffectView - 您只能在“无模糊”和“完全模糊”之间进行动画处理。
编辑:如果有人感兴趣,我创建了一个子类,UIVisualEffectView
可以让您完全控制模糊半径。需要注意的是,它使用私有UIKit
API,因此您可能不应该使用它提交应用程序以供审核。但是,它对于原型或内部应用程序仍然很有趣和有用:
https ://github.com/collinhundley/APCustomBlurView