博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS:CALayer的隐式动画的详解
阅读量:6431 次
发布时间:2019-06-23

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

CALayer的隐式动画属性:
•每一个UIView内部都默认关联着一个CALayer,称这个Layer为Root Layer。所有的非Root Layer都存在着隐式动画,隐式动画的默认时长为1/4秒。
•当修改非Root Layer的部分属性时,相应的修改会自动产生动画效果,能执行隐式动画的属性被称为“可动画属性”,诸如:
1.bounds: 缩放动画
2.position: 平移动画
3.opacity: 淡入淡出动画(改变透明度)
•在文档中搜素animatable可以找到所有可动画属性
•如果要关闭默认的动画效果,可以通过动画事务方法实现:

[CATransaction begin];

[CATransaction setDisableActions:YES];

// ...一些其他的代码<#code#>

[CATransaction commit];

 

具体的演示实例如下:只需要在控制器ViewController类中写代码即可.......

操作目的:当我们触摸屏幕时,子层会动画跑到点击的位置停留下来,同时动画的过程中,它的透明度和形变也可以发生改变。

 

操作步骤:

1.创建子层,设置属性,然后添加到根层

- (void)viewDidLoad {    [super viewDidLoad];        //创建子层并设置属性(使用了默认的锚点)    self.subLayer = [[CALayer alloc]init];    self.subLayer.bounds = CGRectMake(0, 0, 100, 100);    self.subLayer.position = CGPointMake(100, 100);    self.subLayer.backgroundColor = [[UIColor redColor]CGColor];        //将子层添加到根层    [self.view.layer addSublayer:self.subLayer];}

2.重写-(void)touchBegan:(NSSet*)touches withEvent:(UIEvent *)event方法,进行触摸事件的处理,动画过程中处理的代码如下:

  //取出当前点

//取出当前点    UITouch *touch = [touches anyObject];    CGPoint location = [touch locationInView:self.view];

  //开始动画事物([CATransaction setDisableActions:YES]关闭隐式动画后,子层直接跳到了触击位置,没有了移动动画流程)

//动画事物开始    [CATransaction begin];        //关闭隐式动画    //[CATransaction setDisableActions:YES];

  //设置动画持续时间为1秒

[CATransaction setAnimationDuration:1.0];

 //设置子层的动画后的位置

//设置子层的位置为当前点坐标    self.subLayer.position = location;        //CGRect frame = self.subLayer.frame;      /*    虽然CALayer可以使用frame,但最好还是使用bounds和position。为层设置动画时,用bounds和position会方便一点    */    //self.subLayer.frame = CGRectMake(location.x, location.y, frame.size.width, frame.size.height);

 //设置子层透明度的变化值,透明度由1.0变成了0.5

//设置透明度    self.subLayer.opacity = 0.5;

 //设置子层变形,以x为旋转轴旋转45度

//将子层以x轴为轴旋转45度    self.subLayer.transform = CATransform3DMakeRotation(M_PI_4, 1, 0, 0);

 //提交动画事物

//动画事物提交    [CATransaction commit];

 

3.演示结果如下:

没有任何触发时的截图:                                         在屏幕右下角点击一下,子层慢慢移动了此位置,并且透明度慢慢变浅,形变产生

   

 

 

转载地址:http://ngtga.baihongyu.com/

你可能感兴趣的文章
了解轮询、长轮询、长连接、websocket
查看>>
bzoj2427[HAOI2010]软件安装
查看>>
WPF个人助手更新
查看>>
NLPIR技术助力中文智能数据挖掘
查看>>
python操作redis--------------数据库增删改查
查看>>
Android中仿IOS提示框的实现
查看>>
php初学第一课
查看>>
Windows下与Linux下编写socket程序的区别 《转载》
查看>>
java学习笔记 --- IO(3)
查看>>
Mysql 的FIND_IN_SET函数慢的忧化
查看>>
Web service是什么?
查看>>
python 问题集合
查看>>
豌豆荚工程师谈其新版应用搜索技术
查看>>
螺旋阵(递归和非递归)
查看>>
我的爷爷(知识渊博的下乡知青)
查看>>
jQuery动画连续触发、滞后反复执行解决办法
查看>>
uva 10405 Longest Common Subsequence
查看>>
HttpFileCollection类
查看>>
Eclipse使用常见设置
查看>>
控制台下的字符图像界面
查看>>