12

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

4

1 回答 1

10

答案是肯定的。这是从无模糊 -> 模糊制作动画的示例:

// 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可以让您完全控制模糊半径。需要注意的是,它使用私有UIKitAPI,因此您可能不应该使用它提交应用程序以供审核。但是,它对于原型或内部应用程序仍然很有趣和有用: https ://github.com/collinhundley/APCustomBlurView

于 2015-11-17T21:39:46.677 回答