CABasicAnimation和CAKeyframeAnimation仅仅作用于单独的属性,而CAAnimationGroup可以把这些动画组合在一起。CAAnimationGroup是
另一个继承于CAAnimation的子类。它添加了一个animations数组的属性,用来组合别的动画。
- (void)viewDidLoad {
[super viewDidLoad];
self.containerView = [[UIView alloc]initWithFrame:CGRectMake(0, 150, 200, 200)];
[self.view addSubview:self.containerView];
//create a path
UIBezierPath *bezierPath = [[UIBezierPath alloc]init];
[bezierPath moveToPoint:CGPointMake(0, 150)];
[bezierPath addCurveToPoint:CGPointMake(200, 150) controlPoint1:CGPointMake(75, 0) controlPoint2:CGPointMake(0, 150)];
//draw the path using a CAShapeLayer
CAShapeLayer *pathlayer = [CAShapeLayer layer];
pathlayer.path = bezierPath.CGPath;
pathlayer.fillColor = [UIColor whiteColor].CGColor;
pathlayer.strokeColor = [UIColor redColor].CGColor;
pathlayer.lineWidth = 3.0f;
[self.containerView.layer addSublayer:pathlayer];
//add a colored layer
CALayer *colorLayer = [CALayer layer];
colorLayer.frame = CGRectMake(0, 0, 64, 64);
colorLayer.backgroundColor = [UIColor greenColor].CGColor;
[self.containerView.layer addSublayer:colorLayer];
//create the position animation
CAKeyframeAnimation *animation = [CAKeyframeAnimation animation];
animation.keyPath = @"position";
animation.path = bezierPath.CGPath;
animation.rotationMode = kCAAnimationRotateAuto;
//create the color animation
CABasicAnimation *animation2 = [CABasicAnimation animation];
animation2.keyPath = @"backgroundColor";
animation2.toValue = (__bridge id)[UIColor redColor].CGColor;
//create group animation
CAAnimationGroup *groupAnimation = [CAAnimationGroup animation];
groupAnimation.animations = @[animation,animation2];
groupAnimation.duration = 4.0;
//add the animation to the color layer
[colorLayer addAnimation:groupAnimation forKey:nil];
}