CALayer的簡介及使用

2022-08-30 12:54:14 字數 2639 閱讀 6334

calayer

在ios中,看得見摸得到的東西基本都是uiview,比如button、textfild、label、icon等。

uiview之所以能顯示到螢幕上,完全是因為其內部的乙個圖層。

建立uiview物件時,uiview內部會自動建立乙個圖層(即calayer物件), 通過uiview的layer屬性可以訪問這個層。

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

當uiview需要顯示到螢幕上時,會呼叫drawrect:方法進行繪圖,並且會將所有的內容繪製在自己的圖層上,繪製完畢後,系統將圖層拷貝到螢幕上,於是就完成了uiview的顯示。

即:uiview本身不具備顯示的功能,是它內部的layer層才有顯示功能。

通過操作calayer物件,可以很方便的調整uiview的一些外觀屬性,比如:

陰影、圓角大小、邊框寬度顏色等等,還可以給圖層新增動畫,實現一下炫酷的效果。

calayer的屬性

寬度與高度

@property cgrect bounds;

位置(預設指重點,具體由anchorpoint決定)

@property cgpoint position;

錨點(x、y取值範圍0~1),決定了position的含義

@property cgpoint anchorpoint

背景顏色(cgcolorref型別)

@property cgcolorref backgroundcolor;

形變屬性

@property catransform3d  transform;

邊框顏色(cgcolorref型別)

@property  cgcolorref  bordercolorl

邊框寬度

@property cgfloat borderwidth;

圓角半徑

@property   cgfload  cornerradius;

內容(比如設定為cgimageref)

@property (retain)id contents;

關於calayer的疑惑

首先calayer是定義在quartzcore框架中的。

cgimageref、cgcolorref兩種資料型別是定義在coregraphics框架中的。

uicolor、uiimage是定義在uikit框架中的。

其次quartzcore框架和coregraphics框架是可以跨平台使用的,在ios和mac os x上都能使用,但是uikit只能在ios中使用。

為了保持可移植性,quartzcore不能使用uiimage、uicolor,只能使用cgimageref、cgcolorref。

如何選擇uiview和calayer

通過calayer,就能做出跟uiimageview一樣的介面效果。

相比calayer,uiview多了乙個事件處理的功能。也就是說calayer不能處理使用者的觸控事件,而uiview可以。

所以如果顯示出來東西需要跟使用者進行互動,用uiview;不需要的話uiview和calayer都可以。

calayer效能更高,因為它沒有事件處理功能更加輕量級。

position和anchorpoint

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)

隱式動畫

每乙個uiview內部都預設關聯著乙個calayer,我們可以成這個layer為root layer。

所有的非root layer,也就是手動建立的calayer物件,都存在著隱式動畫。

什麼是隱式動畫?

當對非root layer的部分屬性進行修改時,缺省會自動產生一些動畫效果。

而這些屬性稱為animation properties(可動畫屬性)。

幾個常見的animation properties:

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

backgroundcolor:用於設定calayer的背景色。修改這個屬性會產生背景色的漸變動畫。

position:使用者設定calayer的位置。修改這個屬性會產生平移動畫效果。

可以通過動畫事物(catransaction)關閉預設的隱式動畫效果

[catransaction begin];

[catransaction setdisableactions:yes];

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

[catransaction commit];

核心動畫 CALayer簡介

在ios中看得見摸得著的東西基本上都是uiview,而uiview之所以能看得見摸得著就是因為他有乙個層 calayer property nonatomic,readonly,strong calayer layer 在建立uiview物件時,uiview內部會自動建立乙個層 即calayer物件...

CALayer的基本使用

通過操作calayer物件,可以很方便地調整uiview的一些外觀屬性,比如 陰影圓角大小 邊框寬度和顏色 還可以給圖層新增動畫,來實現一些比較炫酷的效果 calayer使用疑惑 首先calayer是定義在quartzcore框架中的 cgimageref cgcolorref兩種資料型別是定義在c...

CALayer簡介 (四)常用屬性說明

通過uiview 的layer 屬性可以拿到對應的根層,這個層不允許重新建立,但可以往層裡面新增子層 呼叫 calayer 的addsublayer 要具體使用calayer 需要引入 獲取當前圖層或使用靜態方法layer 初始化calayer 後,可以設定以下屬性 bounds 寬度和高度 pos...