正如标题所说,有没有办法动画UIVisualEffectView的模糊半径?我在视图背后有一个动态背景,所以不能使用ImageEffects添加...据我所知,唯一可以做到这一点的是动画不透明度,但iOS抱怨说这样做打破了EffectView所以这绝对是一个坏主意......任何帮助都会很高兴。
答案 0 :(得分:9)
答案是肯定的。这是一个从无模糊动画的示例 - >模糊:
// 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