如何让这个淡入淡出动画生效?

时间:2015-08-05 20:01:55

标签: ios image swift animation fade

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

如果单独执行,任一功能都将按预期工作。我发现另一个线程处理简单的fadeIn或fadeOut,但不是两者都在一起。

我确信代码完全按照我所说的去做,但我无法弄清楚为什么它不起作用。有人能指出我的错误吗?谢谢。

@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

}

}

3 个答案:

答案 0 :(得分:1)

您可以通过一个重复动画实现所需效果。将.Autoreverse | .Repeat作为options:传递给animateWithDuration,它会自动撤消并重复淡入淡出。

按下按钮后,您可以通过调用greenRing.layer.removeAllAnimations()

来停止动画

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

.Autoreverse | .Repeat | .CurveEaseInOut

答案 1 :(得分:0)

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

一旦动画完成,尝试从fadeIn()内部调用fadeOut(),然后你可以多次调用fadeIn(),或者将它放在循环中以使其保持运行。

答案 2 :(得分:0)

由Angela提供,此代码创建了一个具有可变周期的闪烁环。非常感谢。

func fadeInOutSphere() {

    greenRingSphere.alpha = 0.2

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

        self.greenRingSphere.alpha = 1

        }, completion: nil)

}