ios晋级之路-CALayer以及动画CABaseAnimation

CALayer

近期真的是很忙,好久没写新东西了,最近看了一下CALayer 。
CALayer类型管理着基于图像的内容并且允许在内容上执行动画,图层通常习惯于为uiview提供图像显示,但是其也可以不依赖于uiview去显示,一个图层的主要工作是去管理你所提供的可见内容但是图层自己也有一些可以被设置的属性,例如背景色,阴影,边界。除了管理可见内容之外,图层还维持着一些关于几何学的内容(例如位置,size和transform)。调节layer的性能就是如何去初始化在调整图层内容和几何结构上的动画,一个layer对象将持续和动画封装在 CAMediaTiming 协议中,
shadowColor//阴影颜色
shadowOpacity//阴影透明度
shadowOffSet//阴影的偏移量
 
anchorPoint和position的区别
和uiview不同layer由三个属性来设置位置
boundS — 设置大小
anchorPoint锚点(锚点对后续layer动画有很大的影响)
position 锚点在superLayer中的位置
archorPoint(x,y)的两个值默认是(0.5,0.5)
而position则是anchorPoint在superLayer中的位置
layer显示图片
layer.contents = (id)[UIImage imageNamed:@].CGImage;
imageLayer.contentsGravity = kCAGravityResizeAspect;
看一下contentGravity,这个属性决定了contents如何填充
 
 
 
绘制Layer的三种方式
。把一个图像对象直接复制给contents属性
。设置delegate,让代理绘制layer的内容
。继承CALayer,重写绘制方法,来提供layer内容
 
当需要动态改变内容的时候可以使用代理
。displayLayer如果实现了这个代理,那么绘制一个bitmap,然后复制给contents是U型
 
Layer Tree分为三种,model Layer Tree,Presentation Tree ,Render Tree
model Layer Tree :存储的是模态对象,也就是我们通常处理的对象,比如layer.position = CGPointMake
Presentation Tree:存储的是正在执行的动画当前状态,是一个动态的树,由这个树来获取当前动画运动到哪
 
 
有两种方式来影响动画 
CABasicAnimation * animation = [CABasicAnimation animation];
animation.keyPath = @“position.x”;//以KVC方式来访问属性
animation.fromValue = @()//属性的开始值
animation.toValue = @()//属性结束的值
animation.duration = 1;//持续时间
animation.timingFunction = [CAMediaTimingFunction FunctionWithName:kCAMediaTimingFunctionEaseInEaseOut
]//结束函数
[self.View.layer addAnamation:animation forKey:@“basic”]//添加动画
 
fromValue toValue是一种方式,方然也可以用另外一种byValue的方式,这种方式在初始值的基础上加上byValue的值
 
讲解一下时间函数 时间函数决定了动画如何执行,时间函数决定了动画的数学模型,比如加速度最好不要突变
有五种
CAMediaTimingFunctionLinear;线性
CAMediaTimingFunctionEaseIn;加速进入
CAMediaTimingFunctionEaseOut;减速停止
CAMediaTimingFunctionEaseInEaseOut;加速进入减速停止
CAMediaTimingFunctionDefault;默认
当然时间函数支持自定义
如下函数FunctionWithControlPoints
这个函数的四个点决定了一个三维贝塞尔曲线来决定时间函数。
在传递CAAnimation的对象或者子类给Layer的时候,传递的是copy
原文地址:https://www.cnblogs.com/fanxinguu/p/5066608.html