MengTo / Spring

A library to simplify iOS animations in Swift.
http://designcode.io
MIT License
14.08k stars 1.8k forks source link

Mixed animations not working? #315

Open alexeydemidovkz opened 6 years ago

alexeydemidovkz commented 6 years ago

So I am trying to make chained animation with a view moving in, and then after sometime fading out, however I am getting strange results - view is moving in, and then moving out (as if it was animateTo) and in the same time fading out. Here is the code:

            stringCard.animation = "squeezeLeft"
            stringCard.curve = "easeOut"
            stringCard.force = 1.0
            stringCard.duration = 3.5

            stringCard.animateNext(completion: {

                stringCard.animation = "fadeOut"
                stringCard.curve = "easeOut"
                stringCard.force = 1.0
                stringCard.delay = 1.0
                stringCard.duration = 1.5

                stringCard.animateNext {  // was trying stringCard.animateToNext here with same result 
                    print("finished")
                }

            })

If i am doing only the fade in/fade out everything works good, or if i am doing something like this:

            stringCard.animation = "squeezeLeft"
            stringCard.curve = "easeOut"
            stringCard.force = 1.0
            stringCard.duration = 3.5

            stringCard.animateNext(completion: {

                stringCard.animation = "squeezeRight"
                stringCard.curve = "easeOut"
                stringCard.force = 1.0
                stringCard.delay = 1.0
                stringCard.duration = 1.5

                stringCard.animateToNext {
                    print("finished")
                }

            })

Everything works great also (move in, then move out). Is it some kind of unexpected behavior here or am I doing something wrong?

alexeydemidovkz commented 6 years ago

Also if i just manually call this part from another place later (via touch for example):

                stringCard.animation = "fadeOut"
                stringCard.curve = "easeOut"
                stringCard.force = 1.0
                stringCard.delay = 1.0
                stringCard.duration = 1.5

                stringCard.animateNext {  // was trying stringCard.animateToNext here with same result 
                    print("finished")
                }

Then everything works as it should.

alexeydemidovkz commented 6 years ago

Get it working by adding .animate() in the end of the code - so now works exactly as needed (move in, wait, fade out):

            stringCard.animation = "squeezeLeft"
            stringCard.curve = "easeOut"
            stringCard.force = 1.0
            stringCard.duration = 3.5

            stringCard.animateNext(completion: {

                stringCard.animation = "fadeOut"
                stringCard.curve = "easeOut"
                stringCard.force = 1.0
                stringCard.duration = 1.5
                stringCard.delay = 1.0
                stringCard.animate()

            })

            stringCard.animate()

However not sure why it is - will be thankful if anyone can explain, thank you.