1、關于Core Animation
- Core Animation是一個復合引擎,它的職責就是盡可能快地組合屏幕上不同的可視內容,這個內容是被分解成獨立的圖層,存儲在一個叫做 "圖層樹"的體系之中
- 于是這個 "圖層樹" 形成了UIKit以及在iOS應用程序當中你所能在屏幕上看見的一切的基礎
2、圖層與視圖
視圖
- 1、一個視圖就是在屏幕上顯示的一個矩形塊(比如:圖片、文字、視頻),它能夠攔截類似于鼠標點擊或者觸摸手勢登用戶輸入
- 2、視圖在層級關系中可以相互嵌套,一個視圖可以管理它的所有 "子視圖"的位置
- 3、在iOS當中,所有的視圖都從一個叫做 UIView 的基類派生而來,UIView可以處理觸摸時間,可以支持基于Core Graphics繪圖,可以做仿射變換(比如:旋轉或者縮放)
圖層CALayer
- 1、CALayer 類在概念上和UIView類似,同樣也是一些被層級關系樹管理的矩形塊,同樣也可以包含一些內容(比如:圖片、文本)管理子圖層的位置,它們有一些方法和屬性用來做動畫和變換
- 2、和UIView最大的不同是CALayer不處理用戶交互
3、圖層和視圖的平行的層級關系
1、每一個UIView都有一個CALayer實例的圖層屬性,也就是所謂的backing layer,"視圖"的職責就是創建并管理這個"圖層",以確保當子視圖在層級關系中添加或者移除時候,他們關聯的圖層也同樣對應在層級關系樹當中有相同的操作
2、實際上這些背后關聯的"圖層"才是真正用來在屏幕上顯示和做動畫,UIView僅僅是對它的一個封裝,提供了一些iOS類似于處理觸摸的具體功能,以及Core Animation底層方法的高級接口
3、為什么iOS要基于 UIView 和 CALayer 提供兩個平行的層級關系呢?為什么不用一個簡單的層級來處理所有事情呢?:為了就是要做到職責分離,這樣也能避免很多重復代碼
4、實際上,這里并不是兩個層級關系,而是四個,每一個都扮演不同的角色
視圖層級
圖層樹
呈現樹
渲染樹
4、通過一個實例:給一個視圖中的圖層添加一個“子圖層”
#import "ViewController.h"
//#import <QuartzCore/QuartzCore.h>
@interface ViewController ()
/**
* layerView
*/
@property (nonatomic, strong) UIView *layerView;
/**
* blueLayer
*/
@property (nonatomic, strong) CALayer *blueLayer;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 背景顏色
self.view.backgroundColor = [UIColor darkGrayColor];
// View
self.layerView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 200, 200)];
self.layerView.backgroundColor = [UIColor whiteColor];
[self.view addSubview:self.layerView];
//blueLayer
self.blueLayer = [CALayer layer];
self.blueLayer.frame = CGRectMake(50, 50, 100, 100);
self.blueLayer.backgroundColor = [UIColor blueColor].CGColor;
[self.layerView.layer addSublayer:self.blueLayer];
}
@end
小結
- 一個視圖只有一個相關的圖層(自動創建),同時它也可以支持添加無數多個子圖層