CALayer


*CALayer

1.介绍
2.与view的关系
3.layer能做什么
4.layer图层结构
5.相关api
6.子类
7.隐式动画

1.介绍
CALayer图层,如果把View比作销售方的话 那么CALaye就是生产方。layer负责绘制图层,view负责显示并接受事件。其实view能做的事layer也能做,但是唯独事件接受无法做。
2.与view的关系
view的内部有一个layer,当view需要显示内容时会调用DrawRect:方法,并将所绘制的内容都显示到自己的图层上,绘制完成后将绘制内容复制到屏幕上就完成了view的显示。说白了view并不能真正的显示内容,而是把绘制工作交给了他的内部layer,自己只负责接受事件和动画方面更底层的工作。
区别:
view能够显示并接受相关事件。继承与UIResponser
layer负责绘制内容,不处理相关事件。继承与NSObject
3.layer能做什么
layer可以做很多很多炫酷的动画,设置边框,阴影等等
4.layer图层结构
layer包含了三层结构
最低层backgroundColor 背景色
中层:contents 内容
上层:bordWidth/bordColor 边框
5.相关API

创建
CALayer *layer = [CALayer layer]
CALayer *layer1 = [[CALayer alloc]init]
常用属性
1.位置相关
CGRect bounds 宽高
 CGPoint position 位置 默认终点由anchorPoint决定 用来设置layer在父层中的位置 以父视图左上角(0,0为原点
 CGPoint anchorPoint 锚点(x,y的范围都是0-1)
 
  CGRect frame 图层大小和位置,不支持隐式动画,所以很少使用,通常使用bounds和position
  
CGColorRef backgroundColor 背景颜色
 BOOL doubleSided 图层背景是否显示 默认YES
 BOOL hidden 是否隐藏
 
2.边框相关
layer.borderWidth 边框宽度
 layer.borderColor 边框颜色
 layer.masksToBounds 超出边框是否裁剪 默认NO
 layer.cornerRadius 圆角半径
 
 3.内容相关
  id contents 内容,比如设置为图片CGImageRef
  CGRect contentsRect 图层显示内容的大小和位置
  
4.动画相关
 CATransform3D transform 实现3d移动缩放旋转效果 UIView的transform属性是2D的
5.阴影相关
CGColorRef shadowColor 阴影颜色
 CGColorRef shadowOffset 阴影偏移量
 float shadowOpacity 阴影透明度, 默认0,如果设置阴影必须设置此属性
 CGPathRef shadowPath 阴影形状
 CGFloat shadowRadius 阴影模糊半径
6.遮罩模版
 CALayer mask 图层蒙版---比较重要
 7.透明度
  float opacity 图层透明度
//////常用方法
 //添加子视图
 -(void)addSublayer:(CALayer *)layer
 
 将自己从父视图中移除
 -(void)removeFromSuperlayer
 
  在自己子图层数组中的第idx位置添加图层
 - (void)insertSublayer:(CALayer *)layer atIndex:(unsigned)idx;
  将图层layer添加在子图层sibling的下面
 - (void)insertSublayer:(CALayer )layer below:(nullable CALayer )sibling;
 - 
  将图层layer添加在子图层sibling的上面
- (void)insertSublayer:(CALayer )layer above:(nullable CALayer )sibling;
  将图层layer替换layer2;
- (void)replaceSublayer:(CALayer )layer with:(CALayer )layer2;
//////动画相关方法
- (void)addAnimation:(CAAnimation )anim forKey:(nullable NSString )key;
 图层添加某一属性的动画
 
- (nullable NSArray< NSString > )animationKeys;
 获取所有动画的属性
 
 - (nullable CAAnimation )animationForKey:(NSString )key;
 获取某一属性的动画
 
- (void)removeAnimationForKey:(NSString *)key;
 移除某一属性动画
 
- (void)removeAllAnimations;
 移除所有动画

6.相关子类
CALayer有很多子类我用过的3个子类
1.CAGradientLayer 色调渐变layer
2.CAEmitterLayer 粒子发射器
3. CAShapeLaye 根据路径绘制一般和UIBezierPath搭配使用

7.隐式动画
隐式动画顾名思义隐藏式动画,不需要编写动画相关代码就能实现的动画就叫隐式动画。
我们点击CALayer头文件进入内部时发现他的添加了

NSObject <NSSecureCoding, CAMediaTiming>动画协议

layer的某些属性如果发生改变时会有动画效果默认包含了CABasicAnimation效果。比如frame,bounds,backgroundColor,position等等
如果想知道layer的某个属性是否支持隐士动画可以点击属性进去看看头文件是否有CAMediaTiming协议
注意:view的根layer是不支持隐士动画的,需要我们手动添加动画代码。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章