博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS:核心动画之动画组CAAnimationGroup
阅读量:6039 次
发布时间:2019-06-20

本文共 3253 字,大约阅读时间需要 10 分钟。

CAAnimationGroup——动画组
动画组,是CAAnimation的子类,可以保存一组动画对象,将CAAnimationGroup对象加入层后,组中所有动画对象可以同时并发运行
属性说明:
–animations:用来保存一组动画对象的NSArray
默认情况下,一组动画对象是同时运行的,也可以通过设置动画对象的beginTime属性来更改动画的开始时间
 
具体的实例如下:
实现功能:在创建的动画组中存入两个基本动画,一个是沿着Z轴旋转360度的动画,另一个是放大2倍的动画,这两个动画并发执行,动画结束后,均不在恢复原状。
代码如下:
//声明属性
#import "ViewController.h"@interface ViewController ()@property (strong,nonatomic)CALayer *subLayer; //声明核心动画子层@end
//创建动画子层,同时创建触摸手势,添加的手势事件处理的是动画组
@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];        //创建子层    self.subLayer = [CALayer layer];    self.subLayer.bounds = CGRectMake(100, 100, 100, 100);    self.subLayer.position = CGPointMake(100, 100);    self.subLayer.backgroundColor = [[UIColor redColor]CGColor];    [self.view.layer addSublayer:self.subLayer];                //添加触摸手势    UITapGestureRecognizer  *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tap:)];    tap.numberOfTapsRequired = 1;    tap.numberOfTouchesRequired = 1;    [self.view addGestureRecognizer:tap];}
//定义方法,返回一个用于旋转的基本动画
#pragma mark 返回一个实现旋转的基本动画-(CABasicAnimation*)rotationAnimationFromValue:(CGFloat)fromValue toValue:(CGFloat)tovalue{    //创建基本动画(用于旋转)    CABasicAnimation *baseAnimation = [[CABasicAnimation alloc]init];        //设置形变属性值为旋转属性值    baseAnimation.keyPath = @"transform.rotation.z";        //设置旋转初值    baseAnimation.fromValue = @(fromValue);        //设置旋转终值    baseAnimation.toValue = @(tovalue);        //设置旋转动画持续时间    baseAnimation.duration = 1.0f;            //设置动画旋转结束后不恢复原状    baseAnimation.removedOnCompletion = NO;    baseAnimation.fillMode = kCAFillModeForwards;        return baseAnimation;}
//定义方法,返回一个用于放缩的基本动画
#pragma mark 返回一个实现放缩的基本动画-(CABasicAnimation*)scaleAnimationFromValue:(CGFloat)fromValue toValue:(CGFloat)tovalue{    //创建基本动画(用于放缩)    CABasicAnimation *animScale = [[CABasicAnimation alloc]init];        //设置形变属性为放缩属性值    animScale.keyPath = @"transform.scale";        //设置放缩初值    animScale.fromValue = @(fromValue);        //设置放缩终值    animScale.toValue = @(tovalue);        //设置放缩动画持续时间    animScale.duration = 1.0f;        //设置动画放缩结束后不恢复原状    animScale.removedOnCompletion = NO;    animScale.fillMode = kCAFillModeForwards;        return animScale;}
//处理触摸手势的事件,创建动画组,并将上面返回的两个动画对象添加进去,然后并发的执行动画组
#pragma mark -tap触摸事件-(void)tap:(UITapGestureRecognizer *)sender{    //方式一:依次调用各个的动画,效果也是可以的    //旋转360度    //[self.subLayer addAnimation:[self rotationAnimationFromValue:-M_PI toValue:M_PI] forKey:@"baseAnimation"]; //放大2倍    //[self.subLayer addAnimation:[self scaleAnimationFromValue:1.0 toValue:2.0] forKey:@"animScale"];        //方式二:并发执行动画组中的所有动画    //创建动画组    CAAnimationGroup *Group = [[CAAnimationGroup alloc]init];        //将各种动画对象加入数组中    NSArray *animations = @[[self rotationAnimationFromValue:-M_PI toValue:M_PI],[self scaleAnimationFromValue:1.0 toValue:2.0]];            //动画数组中的动画的属性受动画组的统一控制    Group.animations = animations;        //设置动画组中所有动画的持续时间    Group.duration = 1.0;        //设置动画组中所有动画运行结束后不恢复原状    Group.removedOnCompletion = NO;    Group.fillMode = kCAFillModeForwards;        //往子层中添加动画组    [self.subLayer addAnimation:Group forKey:@"Group"];}
演示结果如下:
开始时:
                 
某一时刻:(由于动画过程中截取的图,截图比较大一些)  
   
           
结束时:
程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式!
分类:
 
 
本文转自当天真遇到现实博客园博客,原文链接: ,如需转载请自行联系原作者
你可能感兴趣的文章
cronexpression 详解
查看>>
一周小程序学习 第1天
查看>>
小孩的linux
查看>>
SpringMVC、MyBatis声明式事务管理
查看>>
开发者详解:端游及手游服务端的常用架构
查看>>
JavaScript History对象
查看>>
在 Windows 下安装 Oracle 11g XE (Express Edition)
查看>>
ListView优化
查看>>
【原创】 PostgreSQL 实现MySQL 的auto_increment 字段
查看>>
vs2015添加vc助手
查看>>
检测点1.1
查看>>
android--------阿里 AndFix 热修复
查看>>
java springcloud版b2b2c社交电商spring cloud分布式微服务 (七)高可用的分布式配置中心(Spring Cloud Config)...
查看>>
Oozie与Coordinator调度讲解及系统时区配置与定时触发两种配置方式
查看>>
RGB_YUV_YCbCr
查看>>
tesseract 安装及使用
查看>>
优化SqlServer--数据压缩
查看>>
SharePoint 自定义WebPart之间的连接
查看>>
231. Power of Two
查看>>
control.add()
查看>>