6.2 核心动画->1.0 CALayer的简介
本文并非最终版本,如果想要关注更新或更正的内容请关注文集,联系方式详见文末,如有疏忽和遗漏,欢迎指正。
本文相关目录:
===================== 所属文集:6.0 图形和多媒体 =====================
6.2 核心动画->1.0 CALayer的简介
6.2 核心动画->1.1 CALayer的基本属性
6.2 核心动画->1.2 CALayer的创建 & 非根layer的隐式动画
6.2 核心动画->2.0 Core Animation(核心动画)
6.2 核心动画->3.0 核心动画 & UIView动画
6.2 核心动画->4.0 常用动画效果
===================== 所属文集:6.0 图形和多媒体 =====================
CALayer的简介:CA(Core Animation)
-
在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮、一个文本标签、一个文本输入框、一个图标等等,这些都是UIView
-
其实UIView之所以能显示在屏幕上,完全是因为它内部的一个
图层
-
在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性可以访问这个层
@property(nonatomic,readonly,retain) CALayer *layer;
-
当UIView需要显示到屏幕上时,会调用drawRect:方法进行绘图,并且会将所有内容绘制在自己的图层上,绘图完毕后,系统会将图层拷贝到屏幕上,于是就完成了UIView的显示。
-
换句话说,
UIView本身不具备显示的功能,是它内部的层才有显示功能
CALayer的基本使用:
(1)通过操作CALayer对象,可以很方便地调整UIView的一些外观属性,比如:
- 阴影
- 圆角大小
- 边框宽度和颜色
(2)给图层添加动画,来实现一些比较炫酷的效果
关于CALayer的疑惑
(1)所属框架
- CALayer是定义在QuartzCore框架中的
- CGImageRef、CGColorRef 两种数据类型是定义在CoreGraphics框架中的
- UIColor、UIImage是定义在UIKit框架中的
(2)是否可跨平台
- QuartzCore框架和CoreGraphics框架是可以跨平台使用的,在iOS和Mac OS X上都能使用(C 语言编写)
- UIKit只能在iOS中使用(Objective-C)
(3)其他
- 为了保证可移植性,QuartzCore不能使用UIImage、UIColor,只能使用CGImageRef、CGColorRef
- 导入其他框架的方式: 选中项目, 在 General中找 Linked Frameworks and Libraries添加对应的框架
【选择】UIView & CALayer
通过CALayer,就能做出跟UIImageView一样的界面效果,既然CALayer和UIView都能实现相同的显示效果,那究竟该选择谁好呢?
- 其实,对比CALayer,UIView多了一个事件处理的功能。
- 也就是说,CALayer不能处理用户的触摸事件,而UIView可以
- 所以,如果显示出来的东西需要跟用户进行交互的话,用UIView;如果不需要跟用户进行交互,用UIView或者CALayer都可以
- 当然,CALayer的性能会高一些,因为它少了事件处理的功能,更加轻量级
- UIView可以通过subviews属性访问所有的子视图
类似地,CALayer也可以通过sublayers属性访问所有的子层
- UIView可以通过superview属性访问父视图
类似地,CALayer也可以通过superlayer属性访问父层
![](https://img.haomeiwen.com/i1903695/387f7c707a0d7ce0.png)
通过上图可得结论:如果两个UIView是父子关系,那么它们内部的CALayer也是父子关系
UIView : 接受和处理系统事件、触摸事件
CALayer : 显示内容
作者:蓝田(Loto)
出处: 简书
如果你觉得本篇文章对你有所帮助,请点击文章末尾下方“喜欢”
如有疑问,请通过以下方式交流:
① 评论区回复
② 微信(加好友请注明“简书+称呼”)
③发送邮件
至 shorfng@126.com
本文版权归作者和本网站共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。