前言
iOS核心动画框架Core Animation,可以从“动画”的两个字上进行理解。何为“动画”?首先,它是一系列的“画”,因此,其包含“画”这个过程,也就是绘图的过程;其次,这些“画”要“动”起来,才能成为“动画”,也就是它要包含“动”的过程。这应该是所有系统实现“动画”的基本过程,iOS也不例外。
从Core Animation的框架组成来看,也确实如此:
“画”也就是绘图
撇开硬件层Graphics Hardware,iOS提供了两个绘图框架:OpenGL ES/OpenGL和Core Grapics。
- OpenGL ES/OpenGL : 第三方开源库,这个就不用多说了,是个地球人都知道。
- Core Graphic : 是对苹果自己实现的绘图框架Quart 2D的封装,Quart 2D 是一组二维绘图和渲染API,而Core Graphic则是通过这组API实现绘图功能的。需要注意的是,它可以在iOS和Mac OS通用。
Core Animation通过以上两个绘图框架实现了“画”的功能。
“动”串联了“画”
Core Animation是QuartzCore的子集,甚至可以说就是QuartzCore = Core Animation,这点可以通过其头文件看到:
#ifndef QUARTZCORE_H
#define QUARTZCORE_H
#include <QuartzCore/CoreAnimation.h>
#endif /* QUARTZCORE_H */
这里也就解释了一直困扰我的问题:QuartzCore、 Core Animation、Core Graphic 、Quart 2D四者之间的关系。
注意:CoreAnimation也是在iOS和Mac OS上是通用的。
问题总结
1.为什么CA神马神马的,用的时候好多都要“.CGXXXX”呢?
CALayer = [[CALayer alloc] init];
layer.backgroundColor = [UIColor redColor].CGColor;
首先,CALayer,它是CoreAnimation中的类。前面说CoreAnimation是跨平台的,为了跨平台的特性,它的backgroundColor属性就不能使用UIColor类型了,因为UIKit只能使用于iOS,而CoreGraphics框架是跨平台的,所以CALayer类的backgroundColor属性就使用了CGColor类型。所以使用时在赋值前要先进行转换,将UIKit中的东西转换为CoreGraphics中的类型。
参考 对CoreGraphics和QuartzCore的理解
持续更新中...
网友评论