一、简介
- 动画组,是CAAnimation的子类,
- 特点:可以保存
一组动画对象
,将CAAnimationGroup对象加入图层后
,组中所有动画对象可以同时并发运行
animations属性:用来保存一组动画对象的NSArray
注意:
默认
情况下,一组动画对象是同时运行的
,也可以通过设置动画对象的beginTime属性来更改动画的开始时间
二、应用
-
实例:
- 点击屏幕,让控制器的view的子控制器redView同时执行:平移、缩放、位移动画 -> 使用动画组
代码实现:如下
#import "ViewController.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIView *redView;
@end
@implementation ViewController
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
CAAnimationGroup *group = [CAAnimationGroup animation];
// 平移
CABasicAnimation *anim = [CABasicAnimation animation];
anim.keyPath = @"position";
anim.toValue = [NSValue valueWithCGPoint:CGPointMake(arc4random_uniform(200), arc4random_uniform(500))];
// 缩放
CABasicAnimation *anim1 = [CABasicAnimation animation];
anim1.keyPath = @"transform.scale";
// 0 ~ 1
static CGFloat scale = 0.1;
if (scale < 1) {
scale = 1.5;
}else{
scale = 0.2;
}
anim1.toValue = @(scale);
// 旋转
CABasicAnimation *anim2 = [CABasicAnimation animation];
anim2.keyPath = @"transform.rotation";
anim2.toValue = @(arc4random_uniform(360) / 180.0 * M_PI);
group.animations = @[anim,anim1,anim2];
group.duration = 0.5;
// 取消反弹
// 告诉在动画结束的时候不要移除
group.removedOnCompletion = NO;
// 始终保持最新的效果
group.fillMode = kCAFillModeForwards;
[_redView.layer addAnimation:group forKey:nil];
}
@end