动画UIVisualEffectView模糊半径?

Bra*_*art 12 objective-c blur animatewithduration uivisualeffectview

正如标题所说,有没有办法为UIVisualEffectView的模糊半径设置动画?我在视图背后有一个动态背景,所以无法使用ImageEffects添加......据我所知,唯一可以做到这一点的是动画不透明度,但iOS抱怨说这样做打破了EffectView所以它肯定看起来好主意......任何帮助都会很高兴.

hun*_*ley 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)
}
Run Code Online (Sandbox Code Playgroud)

这将在一秒的持续时间内将模糊半径从零(完全透明,或者更确切地说 - 完全没有模糊效果)设置为默认半径(完全模糊).并做反向动画:

UIView.animateWithDuration(1.0) { () -> Void in
    blurView.effect = nil
}
Run Code Online (Sandbox Code Playgroud)

即使您实际上完全添加/删除模糊效果,生成的动画也会平滑地变换模糊半径 - UIKit只知道幕后操作.

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

唯一的限制是您无法手动为UIVisualEffectView指定自定义模糊半径 - 您只能在"无模糊"和"完全模糊"之间进行动画处理.

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