OC筆記 - CALayer(2015.4.5)

1.CALayer

在iOS中,你能看得見摸得着的東西基本上都是UIView,比如一個按鈕、一個文本標籤、一個文本輸入框、一個圖標等等,這些都是UIView

 

其實UIView之所以能顯示在屏幕上,完全是因爲它內部的一個圖層

 

在創建UIView對象時,UIView內部會自動創建一個圖層(即CALayer對象),通過UIView的layer屬性可以訪問這個層

@property(nonatomic,readonly,retain)CALayer *layer;

 

UIView需要顯示到屏幕上時,會調用drawRect:方法進行繪圖,並且會將所有內容繪製在自己的圖層上,繪圖完畢後,系統會將圖層拷貝到屏幕上,於是就完成了UIView的顯示

 

 換句話說,UIView本身不具備顯示的功能,是它內部的層纔有顯示功能

 

2.CALayer的基本使用

通過操作CALayer對象,可以很方便地調整UIView的一些外觀屬性,比如:

陰影

圓角大小

邊框寬度和顏色

… …

 

還可以給圖層添加動畫,來實現一些比較炫酷的效果

 

3.CALayer的屬性

寬度和高度

@property CGRect bounds;

 

位置(默認指中點,具體由anchorPoint決定)

@property CGPoint position;

 

錨點(x,y的範圍都是0-1),決定了position的含義

@property CGPoint anchorPoint;

 

背景顏色(CGColorRef類型)

@property CGColorRefbackgroundColor;

 

形變屬性

@property CATransform3Dtransform;

 

邊框顏色(CGColorRef類型)

@property CGColorRefborderColor;

 

邊框寬度

@property CGFloat borderWidth;

 

圓角半徑

@property CGColorRefborderColor;

 

內容(比如設置爲圖片CGImageRef)

@property(retain) id contents;

 

4.關於CALayer的疑惑

首先

CALayer是定義在QuartzCore框架中的

CGImageRefCGColorRef兩種數據類型是定義在CoreGraphics框架中的

UIColorUIImage是定義在UIKit框架中的

 

其次

QuartzCore框架和CoreGraphics框架是可以跨平臺使用的,在iOS和Mac OS X上都能使用

但是UIKit只能在iOS中使用

 

爲了保證可移植性,QuartzCore不能使用UIImageUIColor,只能使用CGImageRefCGColorRef

 

5.UIViewCALayer的選擇

通過CALayer,就能做出跟UIImageView一樣的界面效果

 

既然CALayerUIView都能實現相同的顯示效果,那究竟該選擇誰好呢?

其實,對比CALayerUIView多了一個事件處理的功能。也就是說,CALayer不能處理用戶的觸摸事件,而UIView可以

所以,如果顯示出來的東西需要跟用戶進行交互的話,用UIView;如果不需要跟用戶進行交互,用UIView或者CALayer都可以

當然,CALayer的性能會高一些,因爲它少了事件處理的功能,更加輕量級

 

6.positionanchorPoint

CALayer有2個非常重要的屬性:position和anchorPoint

 

@property CGPoint position;

用來設置CALayer在父層中的位置

以父層的左上角爲原點(0, 0)

 

@property CGPoint anchorPoint;

稱爲“定位點”、“錨點”

決定着CALayer身上的哪個點會在position屬性所指的位置

以自己的左上角爲原點(0, 0)

它的x、y取值範圍都是0~1,默認值爲(0.5, 0.5)

 

7.隱式動畫

每一個UIView內部都默認關聯着一個CALayer,我們可用稱這個Layer爲Root Layer(根層)

 

所有的RootLayer,也就是手動創建的CALayer對象,都存在着隱式動畫

 

什麼是隱式動畫?

當對RootLayer的部分屬性進行修改時,默認會自動產生一些動畫效果

而這些屬性稱爲Animatable Properties(可動畫屬性)

 

列舉幾個常見的Animatable Properties:

bounds:用於設置CALayer的寬度和高度。修改這個屬性會產生縮放動畫

backgroundColor:用於設置CALayer的背景色。修改這個屬性會產生背景色的漸變動畫

position:用於設置CALayer的位置。修改這個屬性會產生平移動畫

 

可以通過動畫事務(CATransaction)關閉默認的隱式動畫效果

[CATransaction begin];

[CATransaction setDisableActions:YES];

self.myview.layer.position= CGPointMake(10,10);

[CATransaction commit];

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章