核心动画
- CAlayer
- 图层颜色都是CGColor
- 每个View都有涂层
- 系统帮你创建的层是主/根层
-
每个层都有个存放内容的层,跟主层是==平级==,在最外层显示
-
UIImageView
- 默认UIImageView的图片不是显示到主层的子层中,放在内容层上
UIView直接修改layer,可以修改里面的内容;UIImageView要修改根层,因为里面的内容是放在layer中的一个contents中的一个属性中
TableView 的sale,不要直接设置layer来进行裁剪属性,这样会影响性能下降
- 默认UIImageView的图片不是显示到主层的子层中,放在内容层上
-
正方形可以通过修改圆角半径
-
长方形的时候不能设置圆角变成圆
- 做动画的时候,尽量不要使用修改圆角半径做动画(一直保持圆形,通过裁剪)
- 可以直接设置主层的边款和颜色
CALayer形变
-
形变是3D效果
-
模糊半径
//设置模糊半径 self.xxx.layer.shadowRadius = 0;
-
设置边框的宽度是往里走的
self.redView.layer.borderWidth = 3;
ACLayer的疑惑
- UIKit只能在iOS中使用
- 主要是为了跨平台
- UIView和CALayer的选择
- UIView 多了事件处理功能
- CALayer不能处理用户的触摸事件
position和anchorePoint
- position
- positon 相当于View中的center
- 是用来设置CALayer在父层中的位置
- 父类左上角为原点
-
anchorePoint
-
成为锚点 定位点
- 决定CALayer身上哪个点会在position属性所指的位置
- 以自己的左上角为原点
- 默认值是(0.5,0.5)
- anchorePoint定位到position点的位置
- 这两个属性的点一直保持重合
- 无论设置position还是anchorePoint位置都会发生变化
- 取值范围 0 ~1 , 默认值(0.5,0.5)
- UIView的Center就是它内部layer的Position
隐式动画
- 事务:
- 开启事务
- 设置时长
- 提交事务
- 手动创建的CALayer对象,都存在着隐式动画
(非根层)
- 判断是否是可动画属性(Animatable)
- 根层没隐式动画.
时钟
- 最短路径,两边路径一样,默认逆时针旋转
- 所有的旋转和缩放都是绕着锚点进行的
- 在系统头文件,看见位移的符号就可以用 | 的方式来操作
- 需要设置锚点
- 默认一个控件或者layer是绕着锚点旋转
- 算出旋转的度数
- 代码实现构建思路
- 导入钟表图片
- 添加控件 (秒 分 时);
- 指针不停的转动,用到定时器
- 角度转弧度
- 每分钟转时针也要转一点 30/60 每分钟 时针转的度数
- 尖尖的感觉 可以设置圆角半径
core Animation (核心动画)
- 跨平台
- 在后台操作,不会阻塞主线程
-
直接作用在CALayer上
,不是 UIView
-
核心动画继承结构
核心动画继承结构 - 动画功能
- CAAnimationGroup
- CATransition(转产动画)
使用比例非常大
- CAPropertyAnimation(子类有具体功能)
- CABasicAnimation(单个)
- CAKeyframeAnimation (多个)
- 可以让动画根据路径走
- 核心动画为什么搞这么多对象
- 为了更加面向对象
CABasicAnimation
- 动画的本质就是修改图层的某些属性
- 核心动画,利用核心动画修改Layer的某些属性
- 创建核心动画
- 描述修改Layer的哪个属性
- 属性keyPath
自动提示宏
//直接在宏的参数前添加 #,就可以生成这个参数的c的字符串
#define keyPath(objc,keyPath) @(((void)objc.keyPath,#keyPaht))
//描述要修改layer的属性
-
修改Layer属性的值
- fromeValue (动画的起点)
- toValue(动画的终点)
-
取消反弹
1. 在动画完成的时候,不要把动画销毁 2. 动画永远保持最新的状态(填充模式)c语言的宏都是k开头;
- 结构体转对象
(使用这个方法)
NSValue valueWithCGPoint;
CAKeyframeAnimation
- 图标抖动效果(2维动画)
anim.keyPath =@"transform.rotation";
//自动反转(怎么样去,那么动画怎么回来)
anim.autoreverses = YES ;
- 直接传值
- 角度转换成弧度
- 定义成个宏(然后传入参数)
- 帧动画可以多个值进行传递
- 还可以传递路径 (根据路径进行移动)
- 创建帧动画对象
- 描述修改layer的属性
- 绘制路径
- 添加路径到动画路径中去
- 将动画添加到layer中
CATransition (转场动画)
- 需求(图片轮转播放)
只要切换界面,都可以使用转场动画
-
谁切换界面,就添加到谁上面
- 点击屏幕切换图片
- 图片名字为变量,利用static,只用初始化一次
- 界面切换的代码
- 必须都放在一起
- 转场动画的代码
-
转场动画
-
转场类型
-
转场动画代码必须和界面切换的代码放在一起
-
小细节
//通过KVC一般是做快速旋转,平移,缩放 [self.imageV.layer setValue:value forKeyPath@"transform.rotation.x"];
//用事务关闭隐式动画 [CATransaction setDisableActions:YES];
-
网友评论