如何让这个淡入淡出动画起作用?

How do I get this fade animation to work?

我正在尝试设置一个简单的脉动环,它会突出显示一个按钮,以提示用户选择推荐的选项。我制作了简单的 fadeIn() 和 fadeOut() 函数,在 fadeOut() 中设置了延迟,以便它会在 fadeIn() 完成时触发……或者至少这是我的意图。结果是,按下按钮时,环立即变为 alpha = 1,然后延迟 2 秒,然后在 2 秒内逐渐消失。一旦我有一个循环工作,我想把它放入一个循环中以在需要时保持它运行。

如果单独执行,这两个函数都会按预期工作。我发现另一个线程处理简单的淡入或淡出,但不是同时处理。

我确信代码完全按照我告诉它的方式执行,但我不明白为什么它不起作用。有人可以指出我的错误吗?谢谢。

@IBOutlet weak var greenRing: UIImageView!

@IBAction func buttonPressed(sender: AnyObject)

    {
        fadeIn()

        fadeOut()
    }

func fadeIn() {

    UIImageView.animateWithDuration(2.0, animations: {

        self.greenRing.alpha = 1

        })

}

func fadeOut() {

    UIImageView.animateWithDuration(2.0, delay: 2.0, options: nil, animations: {

        self.greenRing.alpha = 0

        }, completion: nil)

}

override func viewDidLoad() {
    super.viewDidLoad()

    greenRing.alpha = 0

}

}

通过在 fadeIn() 之后立即调用 fadeOut(),系统在技术上立即开始第二个动画,其第一步是延迟。为了开始第二个动画,它立即完成第一个动画并继续前进。

尝试在动画完成后从 fadeIn() 内部调用 fadeOut(),然后您可以根据需要多次调用 fadeIn(),或者将其放入循环中以保持它 运行 .

你可以用一个重复的动画来达到你想要的效果。将 .Autoreverse | .Repeat 作为 options: 传递给 animateWithDuration,它将自动反转并重复淡入。

按下按钮时,可以调用greenRing.layer.removeAllAnimations()停止动画

如果您还添加选项 UIViewAnimationOption.CurveEaseInOut,动画也可能看起来更漂亮。所以:

.Autoreverse | .Repeat | .CurveEaseInOut

感谢 Angela,这段代码创建了一个周期可变的闪烁环。非常感谢。

func fadeInOutSphere() {

    greenRingSphere.alpha = 0.2

    UIImageView.animateWithDuration(3.0, delay: 0.0, options: .Autoreverse | .Repeat, animations: {

        self.greenRingSphere.alpha = 1

        }, completion: nil)

}