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属性访问父层
6.2 核心动画->1.0 CALayer的简介_第1张图片
UIView & CALayer.png

通过上图可得结论:如果两个UIView是父子关系,那么它们内部的CALayer也是父子关系

UIView : 接受和处理系统事件、触摸事件
CALayer : 显示内容 




作者:蓝田(Loto)
出处:

如果你觉得本篇文章对你有所帮助,请点击文章末尾下方“喜欢”
如有疑问,请通过以下方式交流:
评论区回复微信(加好友请注明“+称呼”)发送邮件至 shorfng@126.com



本文版权归作者和本网站共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

你可能感兴趣的:(6.2 核心动画->1.0 CALayer的简介)