一 CALayer
1.1 什么是CALayer
在iOS系統(tǒng)中倡勇,你能看得見摸得著的東西基本都是UIView,比如:一個(gè)按鈕,一個(gè)文本標(biāo)簽村生,一個(gè)輸入框惊暴,一個(gè)圖標(biāo)等等,這次都是UIView.
其實(shí)UIView之所以能顯示在屏幕上趁桃,完全是因?yàn)樗鼉?nèi)部的一個(gè)層(CALayer).
在創(chuàng)建UIView對(duì)象時(shí)候辽话,UIView內(nèi)部會(huì)自動(dòng)創(chuàng)建一個(gè)層(即CALayer對(duì)象),通過UIView的layer屬性可以訪問這個(gè)層镇辉,當(dāng)UIView需要顯示在屏幕上時(shí)屡穗,會(huì)調(diào)用drawRect:方法進(jìn)行繪圖,并且會(huì)將所有內(nèi)容繪制在自己的層上忽肛,繪制完畢后,系統(tǒng)會(huì)將層拷貝到屏幕上烂斋,于是就完成來UIView顯示
換句話說屹逛,UIView本身不具備顯示的功能础废,是它內(nèi)部的層才有顯示功能
1.2 CALayer是被定義在QuartsCore框架中
通過CALayer對(duì)象可以很方便的調(diào)整UIView的一些界面屬性,比如:陰影罕模,圓角大小评腺,邊框?qū)挾龋吙蝾伾鹊?/p>
為什么CALayer中使用CGColor和CGImage這2種數(shù)據(jù)類型淑掌,而不是UIColor和UIImage蒿讥?
答:首先了解:CALayer是定義在QuartzCore(圖層編程)框架中:CGColorRef和CGImageRef兩種數(shù)據(jù)是定義在CoreGraphics(簡(jiǎn)單繪圖)框架,而UIColor抛腕,UIImage是定義在UIKit框架中得芋绸。
其次,QuartzCore和CoreGraphics這兩個(gè)框架是可以跨平臺(tái)使用担敌,既可以在iOS中也可以在Mac os X上使用摔敛,但是UIKit只能在iOS中使用
因此。為了保證可以移植性全封,QuartzCore不能使用UIImage马昙,UIColor,只能使用CGColorRef刹悴,CGImageRef行楞。不過很多情況下,可以通過UIKit對(duì)象的特定方法土匀,得到CGColorRef敢伸,CGImageRef
UIView和CALayer的選擇
對(duì)比CALayer,UIView多了一個(gè)事件處理的功能恒削,也就是說池颈,CALayer不能處理用戶的觸摸事件,而UIView可以
所以钓丰,如果顯示出來的東西需要跟用戶交互躯砰,用UIView;如果不需要跟用戶交互携丁,用UIView和CALayer都可以琢歇,當(dāng)然,CALayer的性能會(huì)高一些梦鉴,因?yàn)樗倭耸录幚淼墓δ芾蠲#虞p量級(jí)。
二 核心動(dòng)畫 CoreAnimation 【QuartzCore.framework】
2.1 是什么
1.它是一組非常強(qiáng)大的動(dòng)畫處理API肥橙,使用它能做出非常炫麗的動(dòng)畫類型魄宏,而且往往是事半功倍,也就是說使用少量的代碼可以實(shí)現(xiàn)非常強(qiáng)大的功能
2.Core Animation 可以用在Mac os X和iOS平臺(tái)
【要注意的是:Core Animation是直接操作在CALayer上存筏,并非 UIView】
2.2 使用步驟:
1.初始化一個(gè)CoreAnimation對(duì)象宠互,并設(shè)置一些動(dòng)畫相關(guān)屬性
2.通過調(diào)用CALayer的addAnimation:forKey:方法增加CoreAnimation對(duì)象到CALayer中味榛,這樣就能開始執(zhí)行動(dòng)畫了
3.通過調(diào)用CALayer的removeAnimationForKey:方法可以停止CALayer中的動(dòng)畫
2.3 根據(jù)剛剛的描述,我們可以看出予跌,要想執(zhí)行動(dòng)畫搏色,就必須初始化一個(gè)CoreAnimation對(duì)象
但其實(shí),一般情況下券册,我們使用的比較多的是CoreAnimation的子類
了解CoreAnimation結(jié)構(gòu) 見【圖】
2.4 CAAnimation的常用屬性
是所有動(dòng)畫的父類频轿,但是它不能直接使用,使用使用它的子類
常見屬性:
1》duration 動(dòng)畫時(shí)間
2》repeatCount:動(dòng)畫的重復(fù)次數(shù)
3》timingFunction:控制動(dòng)畫運(yùn)行的節(jié)奏
4》delegate 動(dòng)畫代理:用來監(jiān)聽動(dòng)畫的執(zhí)行過程
1.動(dòng)畫開始
2.動(dòng)畫結(jié)束
5》beginTime:可以設(shè)置動(dòng)畫延遲執(zhí)行時(shí)間烁焙,想延遲2秒航邢,就設(shè)置為
CACurrentMediaTime()+2, CACurrentMediaTime()tu圖層 當(dāng)前時(shí)間
6)removeOnCompletion:默認(rèn)YES考阱,代表動(dòng)畫執(zhí)行完畢后就從圖層上移除电禀,圖形就會(huì)恢復(fù)到動(dòng)畫執(zhí)行前的狀態(tài)背桐,如果想保持動(dòng)畫執(zhí)行后的狀態(tài),那就設(shè)置為NO
7)fillModel:決定當(dāng)前的行為:動(dòng)畫開始之前,動(dòng)畫結(jié)束之后
2.5 CABasicAnimation
CABasicAnimation是CAPropertyAnimation的子類劲装,使用它可以實(shí)現(xiàn)一些基本的動(dòng)畫效果已维,它可以讓CALayer的某個(gè)屬性從某個(gè)值漸變到另一個(gè)值
屬性:fromValue
toValue
2.6 CAKeyframeAnimation 幀動(dòng)畫
CAKeyframeAnimation是CAPropertyAnimation的子類斧蜕,跟CABasicAnimation的區(qū)別:
CABasicAnimation只能從一個(gè)數(shù)值漸變到另一個(gè)數(shù)值
而CAKeyframeAnimation會(huì)使用一個(gè)NSArray保存這些數(shù)值
屬性:
values:就是上述的NSArray對(duì)象号显,里面的元素稱為“關(guān)鍵幀”,動(dòng)畫會(huì)在指定的時(shí)間內(nèi)鹦倚,依次顯示values數(shù)組中的每一個(gè)關(guān)鍵幀
keyTimes:可以為對(duì)應(yīng)的關(guān)鍵幀指定對(duì)應(yīng)的時(shí)間河质,其取值范圍為0到1,keyTimes中的每一個(gè)時(shí)間都對(duì)應(yīng)著values中的每一幀震叙,如果沒有設(shè)置該屬性掀鹅,默認(rèn)各個(gè)關(guān)鍵幀的時(shí)間是平分的
3.CATransition 轉(zhuǎn)場(chǎng)動(dòng)畫
CATransition是Core Animation的子類,用于做轉(zhuǎn)場(chǎng)動(dòng)畫媒楼,能夠?yàn)閷犹峁┮瞥銎聊缓鸵迫肫聊坏膭?dòng)畫效果
UINavigationController就是通過CATransition實(shí)現(xiàn)了將控制器的師徒推入屏幕的動(dòng)畫效果
屬性:
type:動(dòng)畫過渡的類型
subtype:動(dòng)畫過渡的方向
4.CAAnimationGroup
CAAnimationGroup是Core Animation的子類乐尊,可以保存一組動(dòng)畫對(duì)象,將CAAnimationGroup對(duì)象加入層后划址,組中所有的動(dòng)畫對(duì)象可以同時(shí)并發(fā)運(yùn)行
屬性:
animations:用來保存一組動(dòng)畫對(duì)象的NSArray