一 CALayer
1.1 什么是CALayer
在iOS系統(tǒng)中,你能看得見摸得著的東西基本都是UIView,比如:一個按鈕,一個文本標簽,一個輸入框,一個圖標等等,這次都是UIView.
其實UIView之所以能顯示在屏幕上,完全是因為它內(nèi)部的一個層(CALayer).
在創(chuàng)建UIView對象時候,UIView內(nèi)部會自動創(chuàng)建一個層(即CALayer對象),通過UIView的layer屬性可以訪問這個層,當UIView需要顯示在屏幕上時,會調(diào)用drawRect:方法進行繪圖,并且會將所有內(nèi)容繪制在自己的層上,繪制完畢后,系統(tǒng)會將層拷貝到屏幕上,于是就完成來UIView顯示
換句話說,UIView本身不具備顯示的功能,是它內(nèi)部的層才有顯示功能
1.2 CALayer是被定義在QuartsCore框架中
通過CALayer對象可以很方便的調(diào)整UIView的一些界面屬性,比如:陰影,圓角大小,邊框?qū)挾?,邊框顏色等?/p>
為什么CALayer中使用CGColor和CGImage這2種數(shù)據(jù)類型,而不是UIColor和UIImage?
答:首先了解:CALayer是定義在QuartzCore(圖層編程)框架中:CGColorRef和CGImageRef兩種數(shù)據(jù)是定義在CoreGraphics(簡單繪圖)框架,而UIColor,UIImage是定義在UIKit框架中得。
其次,QuartzCore和CoreGraphics這兩個框架是可以跨平臺使用,既可以在iOS中也可以在Mac os X上使用,但是UIKit只能在iOS中使用
因此。為了保證可以移植性,QuartzCore不能使用UIImage,UIColor,只能使用CGColorRef,CGImageRef。不過很多情況下,可以通過UIKit對象的特定方法,得到CGColorRef,CGImageRef
UIView和CALayer的選擇
對比CALayer,UIView多了一個事件處理的功能,也就是說,CALayer不能處理用戶的觸摸事件,而UIView可以
所以,如果顯示出來的東西需要跟用戶交互,用UIView;如果不需要跟用戶交互,用UIView和CALayer都可以,當然,CALayer的性能會高一些,因為它少了事件處理的功能,更加輕量級。
二 核心動畫 CoreAnimation 【QuartzCore.framework】
2.1 是什么
1.它是一組非常強大的動畫處理API,使用它能做出非常炫麗的動畫類型,而且往往是事半功倍,也就是說使用少量的代碼可以實現(xiàn)非常強大的功能
2.Core Animation 可以用在Mac os X和iOS平臺
【要注意的是:Core Animation是直接操作在CALayer上,并非 UIView】
2.2 使用步驟:
1.初始化一個CoreAnimation對象,并設置一些動畫相關屬性
2.通過調(diào)用CALayer的addAnimation:forKey:方法增加CoreAnimation對象到CALayer中,這樣就能開始執(zhí)行動畫了
3.通過調(diào)用CALayer的removeAnimationForKey:方法可以停止CALayer中的動畫
2.3 根據(jù)剛剛的描述,我們可以看出,要想執(zhí)行動畫,就必須初始化一個CoreAnimation對象
但其實,一般情況下,我們使用的比較多的是CoreAnimation的子類
了解CoreAnimation結構 見【圖】
2.4 CAAnimation的常用屬性
是所有動畫的父類,但是它不能直接使用,使用使用它的子類
常見屬性:
1》duration 動畫時間
2》repeatCount:動畫的重復次數(shù)
3》timingFunction:控制動畫運行的節(jié)奏
4》delegate 動畫代理:用來監(jiān)聽動畫的執(zhí)行過程
1.動畫開始
2.動畫結束
5》beginTime:可以設置動畫延遲執(zhí)行時間,想延遲2秒,就設置為
CACurrentMediaTime()+2, CACurrentMediaTime()tu圖層 當前時間
6)removeOnCompletion:默認YES,代表動畫執(zhí)行完畢后就從圖層上移除,圖形就會恢復到動畫執(zhí)行前的狀態(tài),如果想保持動畫執(zhí)行后的狀態(tài),那就設置為NO
7)fillModel:決定當前的行為:動畫開始之前,動畫結束之后
2.5 CABasicAnimation
CABasicAnimation是CAPropertyAnimation的子類,使用它可以實現(xiàn)一些基本的動畫效果,它可以讓CALayer的某個屬性從某個值漸變到另一個值
屬性:fromValue
toValue
2.6 CAKeyframeAnimation 幀動畫
CAKeyframeAnimation是CAPropertyAnimation的子類,跟CABasicAnimation的區(qū)別:
CABasicAnimation只能從一個數(shù)值漸變到另一個數(shù)值
而CAKeyframeAnimation會使用一個NSArray保存這些數(shù)值
屬性:
values:就是上述的NSArray對象,里面的元素稱為“關鍵幀”,動畫會在指定的時間內(nèi),依次顯示values數(shù)組中的每一個關鍵幀
keyTimes:可以為對應的關鍵幀指定對應的時間,其取值范圍為0到1,keyTimes中的每一個時間都對應著values中的每一幀,如果沒有設置該屬性,默認各個關鍵幀的時間是平分的
3.CATransition 轉場動畫
CATransition是Core Animation的子類,用于做轉場動畫,能夠為層提供移出屏幕和移入屏幕的動畫效果
UINavigationController就是通過CATransition實現(xiàn)了將控制器的師徒推入屏幕的動畫效果
屬性:
type:動畫過渡的類型
subtype:動畫過渡的方向
4.CAAnimationGroup
CAAnimationGroup是Core Animation的子類,可以保存一組動畫對象,將CAAnimationGroup對象加入層后,組中所有的動畫對象可以同時并發(fā)運行
屬性:
animations:用來保存一組動畫對象的NSArray