iOS开发——动画编程OC篇&(五)动画组

一:组动画简单说明

CAAnimation的子类,可以保存一组动画对象,将CAAnimationGroup对象加入层后,组中所有动画对象可以同时并发运行

属性解析:

animations:用来保存一组动画对象的NSArray

默认情况下,一组动画对象是同时运行的,也可以通过设置动画对象的beginTime属性来更改动画的开始时间

二:分组动画代码示例

代码:

复制代码
 1 #import "YYViewController.h"  2  3 @interface YYViewController ()  4 @property (weak, nonatomic) IBOutlet UIView *iconView;  5  6 @end  7  8 @implementation NJViewController  9 10 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 11 { 12 13 // 平移动画 14 CABasicAnimation *a1 = [CABasicAnimation animation]; 15 a1.keyPath = @"transform.translation.y"; 16 a1.toValue = @(100); 17 // 缩放动画 18 CABasicAnimation *a2 = [CABasicAnimation animation]; 19 a2.keyPath = @"transform.scale"; 20 a2.toValue = @(0.0); 21 // 旋转动画 22 CABasicAnimation *a3 = [CABasicAnimation animation]; 23 a3.keyPath = @"transform.rotation"; 24 a3.toValue = @(M_PI_2); 25 26 // 组动画 27 CAAnimationGroup *groupAnima = [CAAnimationGroup animation]; 28 29 groupAnima.animations = @[a1, a2, a3]; 30 31 //设置组动画的时间 32 groupAnima.duration = 2; 33 groupAnima.fillMode = kCAFillModeForwards; 34 groupAnima.removedOnCompletion = NO; 35 36  [self.iconView.layer addAnimation:groupAnima forKey:nil]; 37 } 38 39 @end
复制代码

说明:平移-旋转-缩放作为一组动画一起执行。

执行效果:

iOS开发——动画编程OC篇&(五)动画组

 

 1 /*

 2  本次演练使用自定义视图的方式,动画的触发方式以手势识别来触发

 3  

 4  1. 指定点平移动画

 5  2. 路径平移动画

 6  3. 贝塞尔曲线路径动画

 7  4. 摇晃动画

 8  */

 9 - (void)viewDidLoad

10 {

11     [super viewDidLoad];

12     

13     // 实例化动画视图

14     AnimationView *view = [[AnimationView alloc]initWithFrame:CGRectMake(50, 50, 100, 100)];

15     [self.view addSubview:view];

16     self.myView = view;

17     

18     // 给myView 添加一个image

19     UIImage *image = [UIImage imageNamed:@"头像1.png"];

20     UIImageView *imageView = [[UIImageView alloc]initWithFrame:view.bounds];

21     [imageView setImage:image];

22     [view addSubview:imageView];

23     

24     // 给myView 添加一个button

25     UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];

26     [button setFrame:CGRectMake(10, 30, 80, 40)];

27     [button setTitle:@"hello" forState:UIControlStateNormal];

28     [view addSubview:button];

29     

30     // 手势识别监听

31     UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapAction:)];

32     [self.view addGestureRecognizer:tap];

33     

34     // 长按手势监听

35     UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longTapAction:)];

36     [self.myView addGestureRecognizer:longPress];

37 }

38 

39 #pragma mark - 动画代理方法

40 - (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag

41 {

42     // 取出动画类型

43     NSString *type = [anim valueForKey:@"animationType"];

44     

45     if ([type isEqualToString:@"translationTo"]) {

46         // 取出目标点 并 设置self.center

47         self.myView.center = [[anim valueForKey:@"targetPoint"]CGPointValue];

48     }

49 }

50 

51 #pragma mark - 手势识别监听方法

52 - (void)longTapAction:(UILongPressGestureRecognizer *)recognizer

53 {

54 //    [(AnimationView *)recognizer.view shakeAnimation];

55     CAKeyframeAnimation *anim = [AnimationView shakeAnimation];

56     

57     [self.myView.layer addAnimation:anim forKey:nil];

58 }

59 

60 - (void)tapAction:(UITapGestureRecognizer *)recognizer

61 {

62     // 取出手势的触摸点

63     CGPoint location = [recognizer locationInView:self.view];

64 

65     // 1. 实例化动画组

66     CAAnimationGroup *group = [[CAAnimationGroup alloc]init];

67     

68     CFTimeInterval duration = 2.0;

69     

70     // 2. 定义动画组中的动画

71 //    CAKeyframeAnimation *anim1 = [AnimationView moveRectWithDuration:duration from:self.myView.center to:location];

72     CAKeyframeAnimation *anim1 = [AnimationView moveWithDuration:duration from:self.myView.center to:location controlPointCount:4];

73     CABasicAnimation *anim2 = [AnimationView rotationWithDuration:duration from:0.0 to:2 * M_PI];

74     

75     CABasicAnimation *scale = [AnimationView scaleWithDuration:duration from:2.0 to:0.5];

76     CABasicAnimation *opacity = [AnimationView opacityWithDuration:duration from:0.1 to:1.0];

77     

78     // 3. 将定义的动画添加到动画组

79     [group setAnimations:@[anim1, anim2, scale, opacity]];

80     

81     // 定义动画组执行的时间长度

82     [group setDuration:duration];

83     

84     // 5) 设置键值记录目标位置,以便动画结束后,修正位置

85     // 并不是所有的动画方法都需要设置目标点

86     [group setValue:@"translationTo" forKey:@"animationType"];

87     [group setValue:[NSValue valueWithCGPoint:location] forKey:@"targetPoint"];

88     [group setDelegate:self];

89     

90     // 4. 将动画组添加到视图的图层

91     [self.myView.layer addAnimation:group forKey:nil];

92 }

 

 

你可能感兴趣的:(ios开发)