iOS_關于CALayer的介紹.(設置背景圖片的三種方式)

l1>CALayer中的“可動畫屬性”.

a)凡是文檔中有“animatable”字樣的屬性都是“可動畫屬性”.

b)可動畫屬性就是說:只要設置了屬性(改變了屬性),會自動使用動畫的方式來執行.

CALayer主要用來展示動畫的, layer不具備交互功能.

Layer中有一個addAnimation:forKey:來為layer添加屬性動畫.

label.layer addAnimation:<#(nonnullCAAnimation*)#>forKey:<#(nullableNSString*)#>

l2>通過CALayer的transform屬性可以實現“旋轉” “平移” “縮放”效果.

structCATransform3D

{

CGFloat m11, m12, m13, m14;

CGFloat m21, m22, m23, m24;

CGFloat m31, m32, m33, m34;

CGFloat m41, m42, m43, m44;

};

structCGAffineTransform{

CGFloat a, b, c, d;

CGFloat tx, ty;

};

設置背景圖片的三種方式:

l1>設置layer的contents屬性

l2>調用自定義view的drawRect:方法進行繪制

l3>設置view的backgroundColor,調用colorWithPatternImage來進行設置.


CALayer的總結

l1>CA -> Core Animation (核心動畫)相對更底層. CALayer負責視圖中顯示內容和動畫.所有動畫都是作用在CALayer上的. UIView負責監聽和相應事件.UIView是更高層的封裝

l2>在iOS中,你能看得見,摸得著的東西基本上都是UIView.比如一個按鈕,一個文本標簽,一個文本輸入框,一個圖標等.這些都是UIView,其實UIView之所以能顯示在屏幕上,完全是因為它內部的一個圖層,在創建UIView對象時, UIView內部會自動創建一個圖層(即CALayer對象),通過UIView的layer屬性即可訪問這個圖層.當UIView需要顯示到屏幕上時,會調用drawRect:方法進行繪圖,并且會將所有內容繪制在自己的圖層上,繪圖完畢后,系統會將圖層拷貝到屏幕上,于是就完成了UIView得顯示.換句話說,UIView本身不具備顯示的功能,是它內部的層才有顯示功能.

l3>首先: CALayer是定義在QuartzCore框架中. CGImageRef, CGColorRef兩種數據類型是定義在CoreGraphics框架中的. UIColor, UIImage是定義在UIKit框架中的.其次: QuartzCore框架和CoreGraphics框架是可以跨平臺使用的,在iOS和Mac OS X上都能使用(C語言編寫)但是UIKit只能在iOS中使用(OC編寫).因此:為了保證可移植性,QuartzCore不能使用UIImage,UIColor,只能使用CGImageRef,CGColorRef.

l4>隱式動畫(可動畫屬性)什么是隱式動畫?當對非Root Layer的部分屬性進行修改時,默認會自動產生一些動畫效果,而這些屬性稱為Animatable Properties (可動畫屬性).如: bounds :用于設置CALayer的寬度和高度,修改這個屬性會產生縮放動畫. background :用戶設置CALayer的背景色,修改這個屬性會產生背景色的漸變動畫. position :用于設置CALayer的位置,修改這個屬性會產生平移動畫.

l5>可以通過動畫事務(CATransaction)關閉默認的隱式動畫效果.代碼參考如下:

[CATransaction begin];

[CATransactionsetDisableActions:YES];

your code…

[CATransactioncommit];

l6>

UIView和CALayer的選擇.通過CALayer就能做出根UIView一樣的界面效果.都能實現相同的顯示效果,請問:那究竟該選擇誰好呢?其實,對比CALayer,UIView多了一個事件處理的功能,也就是說,CALayer不能處理用戶的觸摸事件,而UIView可以.所以,如果顯示出來的東西需要跟用戶進行交互的話,用UIView.UIView用來接收和處理系統事件,觸摸事件.如果不需要跟用戶進行交互,用UIView或者CALayer都可以.當然,CALayer的性能會高一些,因為它少了事件處理的功能,更加輕量級.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容