l1>CALayer中的“可動畫屬性”.
a)凡是文檔中有“animatable”字樣的屬性都是“可動畫屬性”.
b)可動畫屬性就是說:只要設(shè)置了屬性(改變了屬性),會自動使用動畫的方式來執(zhí)行.
CALayer主要用來展示動畫的, layer不具備交互功能.
Layer中有一個addAnimation:forKey:來為layer添加屬性動畫.
label.layer addAnimation:<#(nonnullCAAnimation*)#>forKey:<#(nullableNSString*)#>
l2>通過CALayer的transform屬性可以實現(xiàn)“旋轉(zhuǎn)” “平移” “縮放”效果.
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;
};
設(shè)置背景圖片的三種方式:
l1>設(shè)置layer的contents屬性
l2>調(diào)用自定義view的drawRect:方法進行繪制
l3>設(shè)置view的backgroundColor,調(diào)用colorWithPatternImage來進行設(shè)置.
CALayer的總結(jié)
l1>CA -> Core Animation (核心動畫)相對更底層. CALayer負責視圖中顯示內(nèi)容和動畫.所有動畫都是作用在CALayer上的. UIView負責監(jiān)聽和相應(yīng)事件.UIView是更高層的封裝
l2>在iOS中,你能看得見,摸得著的東西基本上都是UIView.比如一個按鈕,一個文本標簽,一個文本輸入框,一個圖標等.這些都是UIView,其實UIView之所以能顯示在屏幕上,完全是因為它內(nèi)部的一個圖層,在創(chuàng)建UIView對象時, UIView內(nèi)部會自動創(chuàng)建一個圖層(即CALayer對象),通過UIView的layer屬性即可訪問這個圖層.當UIView需要顯示到屏幕上時,會調(diào)用drawRect:方法進行繪圖,并且會將所有內(nèi)容繪制在自己的圖層上,繪圖完畢后,系統(tǒng)會將圖層拷貝到屏幕上,于是就完成了UIView得顯示.換句話說,UIView本身不具備顯示的功能,是它內(nèi)部的層才有顯示功能.
l3>首先: CALayer是定義在QuartzCore框架中. CGImageRef, CGColorRef兩種數(shù)據(jù)類型是定義在CoreGraphics框架中的. UIColor, UIImage是定義在UIKit框架中的.其次: QuartzCore框架和CoreGraphics框架是可以跨平臺使用的,在iOS和Mac OS X上都能使用(C語言編寫)但是UIKit只能在iOS中使用(OC編寫).因此:為了保證可移植性,QuartzCore不能使用UIImage,UIColor,只能使用CGImageRef,CGColorRef.
l4>隱式動畫(可動畫屬性)什么是隱式動畫?當對非Root Layer的部分屬性進行修改時,默認會自動產(chǎn)生一些動畫效果,而這些屬性稱為Animatable Properties (可動畫屬性).如: bounds :用于設(shè)置CALayer的寬度和高度,修改這個屬性會產(chǎn)生縮放動畫. background :用戶設(shè)置CALayer的背景色,修改這個屬性會產(chǎn)生背景色的漸變動畫. position :用于設(shè)置CALayer的位置,修改這個屬性會產(chǎn)生平移動畫.
l5>可以通過動畫事務(wù)(CATransaction)關(guān)閉默認的隱式動畫效果.代碼參考如下:
[CATransaction begin];
[CATransactionsetDisableActions:YES];
your code…
[CATransactioncommit];
l6>
UIView和CALayer的選擇.通過CALayer就能做出根UIView一樣的界面效果.都能實現(xiàn)相同的顯示效果,請問:那究竟該選擇誰好呢?其實,對比CALayer,UIView多了一個事件處理的功能,也就是說,CALayer不能處理用戶的觸摸事件,而UIView可以.所以,如果顯示出來的東西需要跟用戶進行交互的話,用UIView.UIView用來接收和處理系統(tǒng)事件,觸摸事件.如果不需要跟用戶進行交互,用UIView或者CALayer都可以.當然,CALayer的性能會高一些,因為它少了事件處理的功能,更加輕量級.