iOS - 核心動(dòng)畫

一 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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末扔嵌,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子夺颤,更是在濱河造成了極大的恐慌痢缎,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件世澜,死亡現(xiàn)場(chǎng)離奇詭異独旷,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門势告,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蛇捌,“玉大人抚恒,你說我怎么就攤上這事咱台。” “怎么了俭驮?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵回溺,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我混萝,道長(zhǎng)遗遵,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任逸嘀,我火速辦了婚禮车要,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘崭倘。我一直安慰自己翼岁,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布司光。 她就那樣靜靜地躺著琅坡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪残家。 梳的紋絲不亂的頭發(fā)上榆俺,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音坞淮,去河邊找鬼茴晋。 笑死,一個(gè)胖子當(dāng)著我的面吹牛回窘,可吹牛的內(nèi)容都是我干的诺擅。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼毫玖,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼掀虎!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起付枫,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤烹玉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后阐滩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體二打,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年掂榔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了继效。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片症杏。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖瑞信,靈堂內(nèi)的尸體忽然破棺而出厉颤,到底是詐尸還是另有隱情,我是刑警寧澤凡简,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布逼友,位于F島的核電站,受9級(jí)特大地震影響秤涩,放射性物質(zhì)發(fā)生泄漏帜乞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一筐眷、第九天 我趴在偏房一處隱蔽的房頂上張望黎烈。 院中可真熱鬧,春花似錦匀谣、人聲如沸照棋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽必怜。三九已至,卻和暖如春后频,著一層夾襖步出監(jiān)牢的瞬間梳庆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來泰國打工卑惜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留膏执,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓露久,卻偏偏與公主長(zhǎng)得像更米,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子毫痕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容