我想淡出一个带有UIVisualEffectsView的UIBlurEffect:
var blurEffectView = UIVisualEffectView()
blurEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .dark))我在UIButton调用的函数中使用普通动画将其淡入,淡出时也使用.alpha = 0 & hidden = true。
blurEffectView.hidden = false
UIView.animate(withDuration: 1, delay: 0, options: .curveEaseOut) {
self.blurEffectView.alpha = 1
}现在,在两个方向上衰落确实有效,但是当退出时,它会给我一个错误。
<UIVisualEffectView 0x7fdf5bcb6e80>被要求对其不透明性进行动画化。这将导致效果出现中断,直到不透明恢复到1为止。
问题
如何在不破坏UIVisualEffectView并进行渐变的情况下成功地将它淡入淡出呢?
Note
UIVisualEffectView装进UIView,然后把它淡出,没有成功。发布于 2015-09-25 11:00:45
我认为这在iOS9中是新的,但是现在可以在动画块中设置UIVisualEffectView的效果:
let overlay = UIVisualEffectView()
// Put it somewhere, give it a frame...
UIView.animate(withDuration: 0.5) {
overlay.effect = UIBlurEffect(style: .light)
}将其设置为nil以删除。
非常重要--在模拟器上测试时,请确保将模拟器的图形质量覆盖到高质量,以使其工作。
发布于 2016-03-26 00:45:13
苹果文档 (目前)指出..。
当使用UIVisualEffectView类时,请避免小于1的alpha值。
和
在视觉效果视图或其任何超视图上将alpha设置为小于1将导致许多效果看起来不正确或根本不显示。
我相信这里缺少一些重要的背景..。
我建议这样做是为了避免对于持久化视图来说alpha值小于1。在我看来,这不适用于动画的观点。
我的观点-我建议阿尔法值小于1是可以接受的动画。
终端消息声明:
UIVisualEffectView被要求对其不透明性进行动画化。这将导致效果出现中断,直到不透明恢复到1为止。
仔细阅读这篇文章,的效果将显示被破坏。我对此的看法是:
UIVisualEffect视图将不会如苹果预期/设计的那样出现;以及为了扩展@jrturton上面的答案,它帮助我解决了我的问题,我想补充.
若要淡出UIVisualEffect,请使用以下代码(目标-C):
UIView.animateWithDuration(1.0, animations: {
// EITHER...
self.blurEffectView.effect = UIBlurEffect(nil)
// OR...
self.blurEffectView.alpha = 0
}, completion: { (finished: Bool) -> Void in
self.blurEffectView.removeFromSuperview()
} )我成功地使用了这两种方法:将effect属性设置为nil,将alpha属性设置为0。
请注意,将effect设置为nil会在动画末尾创建一个“很好的闪光灯”(因为缺少更好的描述),而将alpha设置为0则会创建一个平稳的过渡。
(让我知道任何语法错误.我是用obj-c.写的)
发布于 2017-02-16 13:53:00
下面是我最后得到的解决方案,它适用于使用Swift 3的iOS10和早期版本
extension UIVisualEffectView {
func fadeInEffect(_ style:UIBlurEffectStyle = .light, withDuration duration: TimeInterval = 1.0) {
if #available(iOS 10.0, *) {
let animator = UIViewPropertyAnimator(duration: duration, curve: .easeIn) {
self.effect = UIBlurEffect(style: style)
}
animator.startAnimation()
}else {
// Fallback on earlier versions
UIView.animate(withDuration: duration) {
self.effect = UIBlurEffect(style: style)
}
}
}
func fadeOutEffect(withDuration duration: TimeInterval = 1.0) {
if #available(iOS 10.0, *) {
let animator = UIViewPropertyAnimator(duration: duration, curve: .linear) {
self.effect = nil
}
animator.startAnimation()
animator.fractionComplete = 1
}else {
// Fallback on earlier versions
UIView.animate(withDuration: duration) {
self.effect = nil
}
}
}
}您还可以使用检查一下这个要点查找示例用法。
https://stackoverflow.com/questions/29307827
复制相似问题