On one of my projects I discovered a bug in a never-ending animation I had set up. Whenever the app was suspended (such as when you multitask and open another app), on relaunching the app the animation was frozen. After some investigating, I discovered that with Core Animation you need to set a flag on the CABasicAnimation class called removedOnCompletion to NO otherwise the animation will get cleaned up when it gets suspended.
CABasicAnimation *dartWiggleAnimation = [CABasicAnimation animationWithKeyPath:@"position"]; dartWiggleAnimation.fromValue = [NSValue valueWithCGPoint:CGPointMake(self.center.x-DART_WIGGLE_HALF, self.center.y+DART_CENTER_H_OFFSET)]; dartWiggleAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(self.center.x+DART_WIGGLE_HALF, self.center.y+DART_CENTER_H_OFFSET)]; dartWiggleAnimation.timingFunction = [CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionEaseInEaseOut]; dartWiggleAnimation.duration = 0.4; dartWiggleAnimation.repeatCount = HUGE_VALF; dartWiggleAnimation.autoreverses = YES; dartWiggleAnimation.removedOnCompletion = NO; [[nextDart layer] addAnimation:dartWiggleAnimation forKey:@"dartWiggle"];
Does this seem like a bug or a feature?