I know you have to use this method to get the delegate method for when the animation has finished:
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag {
The problem is, how would I distinguish between multiple CAAnimations like 2 or more?
I googled this and I haven't found anything useful.
Please share with me on how you accomplished this!
Thanks!
You can set key/value objects for CAAnimation instance like this:
CABasicAnimation *theAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
[theAnimation setValue:@"animation1" forKey:@"id"];
theAnimation.delegate = self;
CABasicAnimation *theAnimation2 = [CABasicAnimation animationWithKeyPath:@"opacity"];
[theAnimation2 setValue:@"animation2" forKey:@"id"];
theAnimation2.delegate = self;
Check which one was called in delegate method:
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{
if([[anim valueForKey:@"id"] isEqual:@"animation1"]) {
NSLog(@"animation1");
}
if([[anim valueForKey:@"id"] isEqual:@"animation2"]) {
NSLog(@"animation2");
}
}
A CAAnimation
object is supposed to be reused from time to time and that's why I don't like to give it a certain key (since it's not unique). What makes it unique is the association with a CALayer with addAnimation:forKey:
. For this reason I use the following code in animationDidStop
:
if animation == layer.animationForKey(AnimationKeys.scaleUp) {
// scaleUp animation has completed
}