ios CALayer詳解

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????? ? iOS CALayer詳解

一、概述

在ios中,能看得見摸得到的東西基本都是UIView,比如一個按鈕、一個文本標簽、一個文本輸入框、一個圖標等等,這些都是UIView。其實UIView之所以能顯示在屏幕上,完全是因為其內(nèi)部的一個圖層,在創(chuàng)建UIView對象時,UIView內(nèi)部會自動創(chuàng)建一個圖層對象(即CALayer對象)。

當UIView需要顯示在屏幕上時,會調(diào)用drawRect方法進行繪圖,并且會將所有內(nèi)容繪制在自己的圖層上。繪圖完畢后,系統(tǒng)會將圖層拷貝到屏幕上,于是就完成了UIView的顯示。換言之,UIView本身不具備顯示的功能,是其內(nèi)部的圖層具有顯示功能。

通過操作CALayer對象,可以很方便的調(diào)整UIView的一些外觀屬性。比如陰影、圓角大小、邊框的寬度和顏色、還能給圖層添加動畫來實現(xiàn)一些比較炫酷的效果。


二、UIView與CALayer之間的區(qū)別

1、UIView相當于一個容器裝載著CALayer,可以處理用戶事件。直接繼承UIResponser。

2、CALayer是用來繪制內(nèi)容的,不能處理用戶事件。直接繼承NSObject。

3、UIView與CALayer是相互依賴的關系。UIView依賴于CALayer提供的內(nèi)容,CALayer依賴于UIView所提供的容器以用來顯示CALayer繪制的內(nèi)容。


三、CALayer的常用屬性

可以通過contents屬性給UIView設置背景圖片:

例如,我們利用CALayer對圖片的顯示進行處理:

運行效果如下:

看上面的代碼,我們明明添加了陰影,為什么沒有出來呢?那是因為陰影效果和圓角裁剪發(fā)生了沖突,如果設置了圓角裁剪,那么陰影效果將不會出現(xiàn)。當注釋掉圓角裁剪時,陰影效果才會展示,如下所示:

四、position和anchorPoint屬性

CALayer有兩個重要的屬性:position和anchorPoint。

position屬性:

(1)用來設置CALayer在父層中的位置.

(2)以父層的左上角為原點(0,0).

anchorPoint屬性:

(1)稱為"定位點"、"錨點"、控件旋轉動畫圍繞著該點旋轉.

(2)以自己的左上角為原點(0,0).

(3)它的x,y取值都是(0~1),默認值是(0.5,0.5),即默認是中點.

(4)決定著CALayer上的哪個點會在position的位置(即設置的錨點會移動到position點的位置)


五、隱式動畫

每一個UIView內(nèi)部都默認關聯(lián)著一個CALayer,我們稱這個Layer為RootLayer(根層),所有的非RootLayer對象,都存在隱式動畫(即系統(tǒng)自帶的一些效果)。

當對非RootLayer的部分屬性進行修改時,默認會產(chǎn)生一些動畫效果,而這部分屬性稱為AnimatableProperties(可動畫屬性).

列舉幾個常見的AnimatableProperties:

bounds:用于設置CALayer的寬度和高度,修改該屬性會產(chǎn)生縮放動畫。

backgroundColor:用于設置CALayer的背景顏色,修改該屬性會產(chǎn)生背景色的漸變動畫。

position:用于設置CALayer的位置,修改該屬性會產(chǎn)生平移動畫。

可以通過動畫事務(CATransation)關閉默認的隱式動畫:

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 1 CALayer IOS SDK詳解之CALayer(一) http://doc.okbase.net/Hell...
    Kevin_Junbaozi閱讀 5,343評論 3 23
  • 在iOS中隨處都可以看到絢麗的動畫效果,實現(xiàn)這些動畫的過程并不復雜,今天將帶大家一窺ios動畫全貌。在這里你可以看...
    每天刷兩次牙閱讀 8,697評論 6 30
  • 在iOS中隨處都可以看到絢麗的動畫效果,實現(xiàn)這些動畫的過程并不復雜,今天將帶大家一窺iOS動畫全貌。在這里你可以看...
    F麥子閱讀 5,271評論 5 13
  • Core Animation其實是一個令人誤解的命名。你可能認為它只是用來做動畫的,但實際上它是從一個叫做Laye...
    小貓仔閱讀 3,969評論 1 4
  • 在iOS實際開發(fā)中常用的動畫無非是以下四種:UIView動畫,核心動畫,幀動畫,自定義轉場動畫。 1.UIView...
    請叫我周小帥閱讀 3,330評論 1 23

友情鏈接更多精彩內(nèi)容