前言
iOS核心動(dòng)畫(huà)框架Core Animation,可以從“動(dòng)畫(huà)”的兩個(gè)字上進(jìn)行理解。何為“動(dòng)畫(huà)”?首先,它是一系列的“畫(huà)”,因此,其包含“畫(huà)”這個(gè)過(guò)程,也就是繪圖的過(guò)程;其次,這些“畫(huà)”要“動(dòng)”起來(lái),才能成為“動(dòng)畫(huà)”,也就是它要包含“動(dòng)”的過(guò)程。這應(yīng)該是所有系統(tǒng)實(shí)現(xiàn)“動(dòng)畫(huà)”的基本過(guò)程,iOS也不例外。
從Core Animation的框架組成來(lái)看,也確實(shí)如此:

“畫(huà)”也就是繪圖
撇開(kāi)硬件層Graphics Hardware,iOS提供了兩個(gè)繪圖框架:OpenGL ES/OpenGL和Core Grapics。
- OpenGL ES/OpenGL : 第三方開(kāi)源庫(kù),這個(gè)就不用多說(shuō)了,是個(gè)地球人都知道。
- Core Graphic : 是對(duì)蘋(píng)果自己實(shí)現(xiàn)的繪圖框架Quart 2D的封裝,Quart 2D 是一組二維繪圖和渲染API,而Core Graphic則是通過(guò)這組API實(shí)現(xiàn)繪圖功能的。需要注意的是,它可以在iOS和Mac OS通用。
Core Animation通過(guò)以上兩個(gè)繪圖框架實(shí)現(xiàn)了“畫(huà)”的功能。
“動(dòng)”串聯(lián)了“畫(huà)”
Core Animation是QuartzCore的子集,甚至可以說(shuō)就是QuartzCore = Core Animation,這點(diǎn)可以通過(guò)其頭文件看到:
#ifndef QUARTZCORE_H
#define QUARTZCORE_H
#include <QuartzCore/CoreAnimation.h>
#endif /* QUARTZCORE_H */
這里也就解釋了一直困擾我的問(wèn)題:QuartzCore、 Core Animation、Core Graphic 、Quart 2D四者之間的關(guān)系。
注意:CoreAnimation也是在iOS和Mac OS上是通用的。
問(wèn)題總結(jié)
1.為什么CA神馬神馬的,用的時(shí)候好多都要“.CGXXXX”呢?
CALayer = [[CALayer alloc] init];
layer.backgroundColor = [UIColor redColor].CGColor;
首先,CALayer,它是CoreAnimation中的類(lèi)。前面說(shuō)CoreAnimation是跨平臺(tái)的,為了跨平臺(tái)的特性,它的backgroundColor屬性就不能使用UIColor類(lèi)型了,因?yàn)閁IKit只能使用于iOS,而CoreGraphics框架是跨平臺(tái)的,所以CALayer類(lèi)的backgroundColor屬性就使用了CGColor類(lèi)型。所以使用時(shí)在賦值前要先進(jìn)行轉(zhuǎn)換,將UIKit中的東西轉(zhuǎn)換為CoreGraphics中的類(lèi)型。
參考 對(duì)CoreGraphics和QuartzCore的理解
持續(xù)更新中...