How do I get this fade animation to work?

萝らか妹 提交于 2020-01-26 00:39:52

问题


I'm trying to set up a simple pulsating ring that will highlight a button, to prompt the user to the recommended choice. I made simple fadeIn() and fadeOut() functions, set a delay in the fadeOut(), so that it will trigger as the fadeIn() completes...or at least that's what I intended. What results is, when the button is pressed, the ring instantly goes to alpha = 1, then delays for 2 seconds, and then fades over 2 seconds. Once I have a cycle working, I'd like to put it into a loop to keep it going while needed.

Either function will work as intended, if executed alone. I found another thread that deals with simple fadeIn or fadeOut, but not both together.

I'm sure the code is doing exactly what I'm telling it do, but I can't figure out why it's not working. Can someone point to my mistake? Thanks.

@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

}

}


回答1:


You can achieve your desired effect with one repeating animation. Pass .Autoreverse | .Repeat as the options: to animateWithDuration and it will automatically reverse and repeat the fadeIn.

When the button is pressed, you can stop the animation by calling greenRing.layer.removeAllAnimations()

The animation will also likely look nicer if you also add the option UIViewAnimationOption.CurveEaseInOut. So:

.Autoreverse | .Repeat | .CurveEaseInOut




回答2:


By calling the fadeOut() immediately after fadeIn(), the system is technically starting the second animation immediately, the first step of which is to delay. In order to start the second animation, it finishes the first animation immediately and moves on.

Try calling fadeOut() from inside fadeIn() once the animation completes, then you can call fadeIn() as many times as you'd like, or put it in a loop to keep it running.




回答3:


Courtesy of Angela, this code creates a flashing ring with variable period. Many thanks.

func fadeInOutSphere() {

    greenRingSphere.alpha = 0.2

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

        self.greenRingSphere.alpha = 1

        }, completion: nil)

}


来源:https://stackoverflow.com/questions/31841798/how-do-i-get-this-fade-animation-to-work

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!