CALayer2 建立新的層

2022-03-28 03:38:57 字數 2575 閱讀 1326

本文目錄

* 上一講已經說過,uiview內部預設有個calayer物件(層),通過layer屬性可以訪問這個層。要注意的是,這個預設的層不允許重新建立,但可以往層裡面新增子層

* uiview可以通過addsubview:方法新增子檢視,類似地,calayer可以通過addsublayer:方法新增子層

接下來演示一下如何新增子層:

回到頂部

1 calayer *mylayer = [calayer layer];

2 // 設定層的寬度和高度(100x100)

3 mylayer.bounds = cgrectmake(0, 0, 100, 100);

4 // 設定層的位置

5 mylayer.position = cgpointmake(100, 100);

6 // 設定層的背景顏色:紅色

7 mylayer.backgroundcolor = [uicolor redcolor].cgcolor;

8 // 設定層的圓角半徑為10

9 mylayer.cornerradius = 10;

10 11 // 新增mylayer到控制器的view的layer中

12 [self.view.layer addsublayer:mylayer];

* 第1行建立了乙個自動釋放的calayer物件,你也可以使用經典的alloc和init方法來建立

* 第12行將建立好的層新增到控制器的view的層中

回到頂部

1 calayer *mylayer = [calayer layer];

2 // 設定層的寬度和高度(100x100)

3 mylayer.bounds = cgrectmake(0, 0, 100, 100);

4 // 設定層的位置

5 mylayer.position = cgpointmake(100, 100);

6 // 設定需要顯示的

7 mylayer.contents = (id)[uiimage imagenamed:@"lufy.png"].cgimage;

8 // 設定層的圓角半徑為10

9 mylayer.cornerradius = 10;

10 // 如果設定了,需要設定這個屬性為yes才有圓角效果

11 mylayer.maskstobounds = yes;

12 13 // 新增mylayer到控制器的view的layer中

14 [self.view.layer addsublayer:mylayer];

* 在第7行設定需要顯示的,注意,這裡用的是uiimage的cgimage屬性,是一種cgimageref型別的資料

回到頂部

* 首先要知道:calayer是定義在quartzcore框架中的;cgimageref、cgcolorref兩種資料型別是定義在coregraphics框架中的;uicolor、uiimage是定義在uikit框架中的

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

* 因此,為了保證可移植性,quartzcore不能使用uiimage、uicolor,只能使用cgimageref、cgcolorref

* 不過很多情況下,可以通過uikit物件的特定方法,得到coregraphics物件,比如uiimage的cgimage方法可以返回乙個cgimageref

回到頂部

細心的朋友不難發現,其實前面的2個效果不僅可以通過新增層來實現,還可以通過新增uiview來實現。比如,第1個紅色的層可以用乙個uiview來實現,第2個顯示的層可以用乙個uiimageview來實現。 既然calayer和uiview都能實現相同的顯示效果,那究竟該選擇誰好呢?

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

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

* 當然,calayer的效能會高一些,因為它少了事件處理的功能,更加輕量級

回到頂部

* uiview可以通過subviews屬性訪問所有的子檢視,類似地,calayer也可以通過sublayers屬性訪問所有的子層

* uiview可以通過superview屬性訪問父檢視,類似地,calayer也可以通過superlayer屬性訪問父層

* 下面再看一張uiview和calayer的關係圖:

如果兩個uiview是父子關係,那麼它們內部的calayer也是父子關係。

CALayer2 建立新的層

本文目錄 上一講 已經說過,uiview內部預設有個calayer物件 層 通過layer屬性可以訪問這個層。要注意的是,這個預設的層不允許重新建立,但可以往層裡面新增子層 uiview可以通過addsubview 方法新增子檢視,類似地,calayer可以通過addsublayer 方法新增子層 ...

CALayer 層的屬性

每乙個uiview內部都預設關聯著乙個calayer,我們可以稱這個layer為root layer 根層 所有的非root layer,也就是手動建立的物件,都存在著隱式動畫。當對非root layer的部分屬性進行相應修改時,缺省會自動產生一些動畫效果,這些屬性稱為 animatable pro...

CALayer層的屬性

一.position和anchorpoint 1.簡單介紹 calayer有2個非常重要的屬性 position和anchorpoint position 1 用來設定calayer在父層中的位置 2 以父層的左上角為原點 0,0 anchorpoint 1 稱為 定位點 錨點 2 決定著calay...