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
UIApplicationDidEnterBackgroundand 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!