I'm trying to restart a UIView animation after the user returns to the app from the background.
Here's the animation:
def animate_glow
UIView.animateWithDuration(GLOW_SPEED,
delay: 0.0,
options: UIViewAnimationOptionRepeat |
UIViewAnimationOptionAutoreverse |
UIViewAnimationOptionAllowUserInteraction,
animations: -> {
@swipe_glow.transform = CGAffineTransformMakeScale(GLOW_SCALE, GLOW_SCALE)
},
completion: nil
)
end
Listening for UIApplicationWillEnterForegroundNotification
I'm trying to call animate_glow
but my animations don't restart/are prevented. Logs show that the notification listener is being called and that UIView.areAnimationsEnabled
returns true
. I've also tried removing the view referenced by @swipe_glow
from superview and creating a new one, and calling animate_glow
This also has no effect on the actual animation (though a new UIView can be created without issue).
Can anyone explain this?
A solution I found, just in case anyone else finds this problem:
UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse |
These lines appeared to be the cause of the problem, as when the animation returned from the background the animations were being set to their end point (
GLOW SCALE
). The system then attempted to restart the animation but found no change to animate.Two possible solutions: Listen for
UIApplicationDidEnterBackground
and in the handler reset the view to be animate's position back to it's origin.Or change the animation blocks to animate & reverse methods that call each other in their
completion:
blocks.Hope this helps someone!