76_iOS干货42_CALayer总结

一,UIView的显示原理

  1. 在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性可以访问这个层;
  2. 当UIView需要显示到屏幕上时,会调用drawRect:方法进行绘图,并且会将所有内容绘制在自己的图层上,绘图完毕后,系统会将图层拷贝到屏幕上,于是就完成了UIView的显示
     

二,苹果设置CALayer的目的

  1. 职责分明,代码清晰:UIView负责事件,CALayer负责展示
  2. 减少代码:在iOS和Mac OS两个平台上,事件和用户交互有很多地方的不同,iOS有UIKit和UIView,但是Mac OS有AppKit和NSView,而绘图,布局和动画抽象成Core Animation框架公用

三,CALayer和UIView的区别

1,功能区别:

  1. UIView可以处理事件,CALayer不能处理事件,只负责展示;
  2. CALayer的功能:
  • 阴影,圆角,带颜色的边框
  • 3D变换
  • 非矩形范围
  • 透明遮罩
  • 多级非线性动画

2,依赖关系:

  • UIView的drawRect依赖CALayer传递过来的上下文才能执行,CALayer绘制并不依赖UIView,依赖UIView进行展示
  • UIView的frame、bounds、center基础属性都获取于view.layer的基础属性,setter方法也会调用view.layer的setter方法

3,属性使用:

  1. CALayer只能使用CGImageRef和CGColorRef,UIView使用UIImage和UIColor;因为CALayer在QuartzCore框架,框架是跨平台;而UIView在UIKit框架,不跨平台,只适用于iOS;
  2. CALayer的position类似于UIView的center(相对于父类坐标)而CALayer的anchorPoint属性相对于自己的坐标:默认{0.5,0.5},UIVIew则无

4,动画特性

  1. 在做 iOS 动画的时候,修改非 RootLayer的属性,会默认产生隐式动画,而修改UIView则不会;
  2. 给图层添加动画,来实现一些比较炫酷的效果;
  3. CALayer的性能会高一些,因为它少了事件处理的功能,更加轻量级;
     

猜你喜欢

转载自blog.csdn.net/a_horse/article/details/83657249