圖層(Layer)與視圖(View)
視圖
視圖是大家比較熟悉晶丘,也是經(jīng)常接觸到的葫录,書中的原意為:
一個視圖就是屏幕上顯示的一個矩形塊捶码,它能夠攔截鼠標點擊或者觸摸手勢等用戶輸入汹押。視圖在層級關(guān)系中可以相互嵌套缘回。
iOS開發(fā)中的視圖為UIView及其子類剂公,UIView
可以處理觸摸時間希俩,支持Core Graphics
繪圖,進行仿射變換(CGAffineTransform
)等纲辽。
圖層
CALayer的功能與UIView基本類似颜武,只不過CALayer不處理用戶的交互,需要注意的是CALayer只是不處理拖吼,即不關(guān)心響應鏈盒刚,但CALayer依舊提供了判斷觸點位置的方法。
層級關(guān)系
每一個UIView
都有一個CALayer
的實例(backing layer
)绿贞,這個實例由UIView
創(chuàng)建和管理因块。這個layer才是真正用來在屏幕上顯示和做動畫的,而UIView則是對CALayer進行了封裝籍铁,提供了處理觸摸的功能涡上,已經(jīng)CoreAnimation底層方法的高級接口。
圖層的能力
上面說過UIView封裝了許多CoreAnimation
中的底層方法拒名,但CALayer依然有很多功能是UIView中沒有涉及到的:
- 陰影吩愧,圓角,邊框
- 3D變換
- 非矩形范圍
- 多級非線性動畫
具體的內(nèi)容會在后面一一講述增显。
使用圖層
我們來創(chuàng)建一個工程雁佳,在屏幕中央添加一個UIView(200 x 200)作為我們接下來要使用的View,命名為layerView同云。
然后我們在這個白色的view上面添加一個小的藍色圖層糖权。書中提到這里需要導入QuartzCore.framework,不過現(xiàn)在大家已經(jīng)不需要再單獨添加了[笑]炸站。
#import "ViewController.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIView *layerView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
CALayer *blueLayer = [CALayer layer];
blueLayer.frame = CGRectMake(50.0f, 50.0f, 100.0f, 100.0f);
blueLayer.backgroundColor = [UIColor blueColor].CGColor;
//添加子圖層
[self.layerView.layer addSublayer:blueLayer];
}
@end
效果如下:
使用圖層關(guān)聯(lián)的視圖而不是CALayer
的好處在于星澳,你能在使用所有CALayer
底層特性的同時,也可以使用UIView
的高級API旱易。然而禁偎,當滿足一下條件時腿堤,你可能更需要使用CALayer
:
- 開發(fā)同時可以再macOS上運行的跨平臺應用
- 使用多種
CALayer
的子類 - 性能調(diào)優(yōu)
不過總的來說,處理視圖比單獨處理圖層更加方便如暖。