首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何淡出UIVisualEffectView和/或UIBlurEffect?

如何淡出UIVisualEffectView和/或UIBlurEffect?
EN

Stack Overflow用户
提问于 2015-03-27 18:33:54
回答 14查看 49.2K关注 0票数 94

我想淡出一个带有UIVisualEffectsView的UIBlurEffect:

代码语言:javascript
复制
var blurEffectView = UIVisualEffectView()
blurEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .dark))

我在UIButton调用的函数中使用普通动画将其淡入,淡出时也使用.alpha = 0 & hidden = true

代码语言:javascript
复制
blurEffectView.hidden = false
UIView.animate(withDuration: 1, delay: 0, options: .curveEaseOut) {
    self.blurEffectView.alpha = 1
}

现在,在两个方向上衰落确实有效,但是当退出时,它会给我一个错误。

<UIVisualEffectView 0x7fdf5bcb6e80>被要求对其不透明性进行动画化。这将导致效果出现中断,直到不透明恢复到1为止。

问题

如何在不破坏UIVisualEffectView并进行渐变的情况下成功地将它淡入淡出呢?

Note

  • 我试着把UIVisualEffectView装进UIView,然后把它淡出,没有成功。
EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2015-09-25 11:00:45

我认为这在iOS9中是新的,但是现在可以在动画块中设置UIVisualEffectView的效果:

代码语言:javascript
复制
let overlay = UIVisualEffectView()
// Put it somewhere, give it a frame...
UIView.animate(withDuration: 0.5) {
    overlay.effect = UIBlurEffect(style: .light)
}

将其设置为nil以删除。

非常重要--在模拟器上测试时,请确保将模拟器的图形质量覆盖到高质量,以使其工作。

票数 193
EN

Stack Overflow用户

发布于 2016-03-26 00:45:13

苹果文档 (目前)指出..。

当使用UIVisualEffectView类时,请避免小于1的alpha值。

在视觉效果视图或其任何超视图上将alpha设置为小于1将导致许多效果看起来不正确或根本不显示。

我相信这里缺少一些重要的背景..。

我建议这样做是为了避免对于持久化视图来说alpha值小于1。在我看来,这不适用于动画的观点。

我的观点-我建议阿尔法值小于1是可以接受的动画。

终端消息声明:

UIVisualEffectView被要求对其不透明性进行动画化。这将导致效果出现中断,直到不透明恢复到1为止。

仔细阅读这篇文章,的效果将显示被破坏。我对此的看法是:

  • 表面上的突破只对一种持之以恒的观点真正重要--而不是改变;
  • A值小于1的持久化/不变的UIVisualEffect视图将不会如苹果预期/设计的那样出现;以及
  • 终端中的消息不是错误,只是警告。

为了扩展@jrturton上面的答案,它帮助我解决了我的问题,我想补充.

若要淡出UIVisualEffect,请使用以下代码(目标-C):

代码语言:javascript
复制
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.写的)

票数 19
EN

Stack Overflow用户

发布于 2017-02-16 13:53:00

下面是我最后得到的解决方案,它适用于使用Swift 3的iOS10和早期版本

代码语言:javascript
复制
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
            }
        }
    }

}

您还可以使用检查一下这个要点查找示例用法。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29307827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档