CAAnimation setRemovedOnCompletion
@property(getter=isRemovedOnCompletion) BOOL removedOnCompletion
Discussion of [CAAnimation setRemovedOnCompletion]
When YES, the animation is removed from the target layer’s animations once its active duration has passed. Defaults to YES.
CAAnimation setRemovedOnCompletion example.
CABasicAnimation *rotationAnimation =[CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; //Rotate about z-axis
[rotationAnimation setFromValue:[NSNumber numberWithFloat:fromDegree]];
[rotationAnimation setToValue:[NSNumber numberWithFloat:toDegree]];
[rotationAnimation setDuration:0.2];
[rotationAnimation setRemovedOnCompletion:NO];
[rotationAnimation setFillMode:kCAFillModeForwards];
[rotationAnimation setFromValue:[NSNumber numberWithFloat:fromDegree]];
[rotationAnimation setToValue:[NSNumber numberWithFloat:toDegree]];
[rotationAnimation setDuration:0.2];
[rotationAnimation setRemovedOnCompletion:NO];
[rotationAnimation setFillMode:kCAFillModeForwards];
Example of [CAAnimation setRemovedOnCompletion].
const CFTimeInterval DURATION = 2.0f;
CABasicAnimation* animation = [CABasicAnimation animationWithKeyPath:@"position.y"];
[animation setDuration:DURATION];
[animation setRemovedOnCompletion:NO];
[animation setFillMode:kCAFillModeForwards];
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]];
[animation setFromValue:[NSNumber numberWithDouble:400.0]];
[animation setToValue:[NSNumber numberWithDouble:0.0]];
[animation setRepeatCount:1.0];
[animation setDelegate:self];
[myview.layer addAnimation:animation forKey:@"animatePositionY"];
animation = [CABasicAnimation animationWithKeyPath:@"position.x"];
[animation setDuration:DURATION];
[animation setRemovedOnCompletion:NO];
[animation setFillMode:kCAFillModeForwards];
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
[animation setFromValue:[NSNumber numberWithDouble:300.0]];
[animation setToValue:[NSNumber numberWithDouble:0.0]];
[animation setRepeatCount:1.0];
[animation setDelegate:self];
[myview.layer addAnimation:animation forKey:@"animatePositionX"];
CABasicAnimation* animation = [CABasicAnimation animationWithKeyPath:@"position.y"];
[animation setDuration:DURATION];
[animation setRemovedOnCompletion:NO];
[animation setFillMode:kCAFillModeForwards];
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]];
[animation setFromValue:[NSNumber numberWithDouble:400.0]];
[animation setToValue:[NSNumber numberWithDouble:0.0]];
[animation setRepeatCount:1.0];
[animation setDelegate:self];
[myview.layer addAnimation:animation forKey:@"animatePositionY"];
animation = [CABasicAnimation animationWithKeyPath:@"position.x"];
[animation setDuration:DURATION];
[animation setRemovedOnCompletion:NO];
[animation setFillMode:kCAFillModeForwards];
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
[animation setFromValue:[NSNumber numberWithDouble:300.0]];
[animation setToValue:[NSNumber numberWithDouble:0.0]];
[animation setRepeatCount:1.0];
[animation setDelegate:self];
[myview.layer addAnimation:animation forKey:@"animatePositionX"];
CAAnimation setRemovedOnCompletion example.
- (void)aniFromColor:(CGColorRef)fromCol toColor:(CGColorRef)toCol {
FlipLayer3View *v = (FlipLayer3View *)[self view];
const CGFloat *fromColors = CGColorGetComponents(fromCol);
const CGFloat *toColors = CGColorGetComponents(toCol);
v.theSquare.backgroundColor = fromCol;
ani1 = [[CABasicAnimation animationWithKeyPath:@"transform"] retain];
[ani1 setDuration:dur];
[ani1 setToValue:[NSValue valueWithCATransform3D:CATransform3DConcat(v.theSquare.transform, CATransform3DRotate(CATransform3DIdentity, M_PI/2, -1, 1, 0))]];
[ani1 setValue:@"shrink" forKey:@"name"];
[ani1 setDelegate:self];
[ani1 setFillMode:kCAFillModeForwards];
[ani1 setRemovedOnCompletion:NO];
ani2 = [[CABasicAnimation animationWithKeyPath:@"backgroundColor"] retain];
UIColor *c1 = [UIColor colorWithRed:(fromColors[0]/2.0f) green:(fromColors[1]/2.0f) blue:(fromColors[2]/2.0f) alpha:1.0f];
const float *cgCol1 = CGColorGetComponents(fromCol);
const float *cgCol2 = CGColorGetComponents(c1.CGColor);
NSLog(@"Setting color FROM R:%f G:%f B:%f", cgCol1[0], cgCol1[1], cgCol1[2]);
NSLog(@"Setting color TO R:%f G:%f B:%f", cgCol2[0], cgCol2[1], cgCol2[2]);
[ani2 setDuration:dur];
[ani2 setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]];
[ani2 setFromValue:(id)fromCol];
[ani2 setToValue:(id)c1.CGColor];
[ani2 setValue:@"dim" forKey:@"name"];
[ani2 setDelegate:self];
[ani2 setFillMode:kCAFillModeForwards];
[ani2 setRemovedOnCompletion:NO];
ani3 = [[CABasicAnimation animationWithKeyPath:@"transform"] retain];
[ani3 setDuration:dur];
[ani3 setFromValue:[NSValue valueWithCATransform3D:CATransform3DConcat(v.theSquare.transform, CATransform3DRotate(CATransform3DIdentity, M_PI/2, -1, 1, 0))]];
[ani3 setToValue:[NSValue valueWithCATransform3D:v.theSquare.transform]];
[ani3 setValue:@"grow" forKey:@"name"]; [ani3 setDelegate:self];
[ani3 setFillMode:kCAFillModeForwards];
[ani3 setRemovedOnCompletion:NO];
ani4 = [[CABasicAnimation animationWithKeyPath:@"backgroundColor"] retain];
UIColor *c2 = [UIColor colorWithRed:(toColors[0]/2.0f) green:(toColors[1]/2.0f) blue:(toColors[2]/2.0f) alpha:1.0f];
cgCol1 = CGColorGetComponents(c2.CGColor);
cgCol2 = CGColorGetComponents(toCol);
NSLog(@"Setting color FROM R:%f G:%f B:%f", cgCol1[0], cgCol1[1], cgCol1[2]);
NSLog(@"Setting color TO R:%f G:%f B:%f", cgCol2[0], cgCol2[1], cgCol2[2]);
[ani4 setDuration:dur];
[ani4 setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]];
[ani4 setFromValue:(id)c2.CGColor];
[ani4 setToValue:(id)toCol];
[ani4 setValue:@"glow" forKey:@"name"]; [ani4 setDelegate:self];
[ani4 setFillMode:kCAFillModeForwards];
[ani4 setRemovedOnCompletion:NO];
[v.theSquare addAnimation:ani1 forKey:@"rotate1"];
[v.theSquare addAnimation:ani2 forKey:@"fadeout"];
}
FlipLayer3View *v = (FlipLayer3View *)[self view];
const CGFloat *fromColors = CGColorGetComponents(fromCol);
const CGFloat *toColors = CGColorGetComponents(toCol);
v.theSquare.backgroundColor = fromCol;
ani1 = [[CABasicAnimation animationWithKeyPath:@"transform"] retain];
[ani1 setDuration:dur];
[ani1 setToValue:[NSValue valueWithCATransform3D:CATransform3DConcat(v.theSquare.transform, CATransform3DRotate(CATransform3DIdentity, M_PI/2, -1, 1, 0))]];
[ani1 setValue:@"shrink" forKey:@"name"];
[ani1 setDelegate:self];
[ani1 setFillMode:kCAFillModeForwards];
[ani1 setRemovedOnCompletion:NO];
ani2 = [[CABasicAnimation animationWithKeyPath:@"backgroundColor"] retain];
UIColor *c1 = [UIColor colorWithRed:(fromColors[0]/2.0f) green:(fromColors[1]/2.0f) blue:(fromColors[2]/2.0f) alpha:1.0f];
const float *cgCol1 = CGColorGetComponents(fromCol);
const float *cgCol2 = CGColorGetComponents(c1.CGColor);
NSLog(@"Setting color FROM R:%f G:%f B:%f", cgCol1[0], cgCol1[1], cgCol1[2]);
NSLog(@"Setting color TO R:%f G:%f B:%f", cgCol2[0], cgCol2[1], cgCol2[2]);
[ani2 setDuration:dur];
[ani2 setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]];
[ani2 setFromValue:(id)fromCol];
[ani2 setToValue:(id)c1.CGColor];
[ani2 setValue:@"dim" forKey:@"name"];
[ani2 setDelegate:self];
[ani2 setFillMode:kCAFillModeForwards];
[ani2 setRemovedOnCompletion:NO];
ani3 = [[CABasicAnimation animationWithKeyPath:@"transform"] retain];
[ani3 setDuration:dur];
[ani3 setFromValue:[NSValue valueWithCATransform3D:CATransform3DConcat(v.theSquare.transform, CATransform3DRotate(CATransform3DIdentity, M_PI/2, -1, 1, 0))]];
[ani3 setToValue:[NSValue valueWithCATransform3D:v.theSquare.transform]];
[ani3 setValue:@"grow" forKey:@"name"]; [ani3 setDelegate:self];
[ani3 setFillMode:kCAFillModeForwards];
[ani3 setRemovedOnCompletion:NO];
ani4 = [[CABasicAnimation animationWithKeyPath:@"backgroundColor"] retain];
UIColor *c2 = [UIColor colorWithRed:(toColors[0]/2.0f) green:(toColors[1]/2.0f) blue:(toColors[2]/2.0f) alpha:1.0f];
cgCol1 = CGColorGetComponents(c2.CGColor);
cgCol2 = CGColorGetComponents(toCol);
NSLog(@"Setting color FROM R:%f G:%f B:%f", cgCol1[0], cgCol1[1], cgCol1[2]);
NSLog(@"Setting color TO R:%f G:%f B:%f", cgCol2[0], cgCol2[1], cgCol2[2]);
[ani4 setDuration:dur];
[ani4 setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]];
[ani4 setFromValue:(id)c2.CGColor];
[ani4 setToValue:(id)toCol];
[ani4 setValue:@"glow" forKey:@"name"]; [ani4 setDelegate:self];
[ani4 setFillMode:kCAFillModeForwards];
[ani4 setRemovedOnCompletion:NO];
[v.theSquare addAnimation:ani1 forKey:@"rotate1"];
[v.theSquare addAnimation:ani2 forKey:@"fadeout"];
}