入門(mén)動(dòng)畫(huà)篇之UIView動(dòng)畫(huà)(二)-----淺談CABasicAnimation基本使用方法

各位觀眾老爺們!(本文轉(zhuǎn)載自博主CSDN賬號(hào)博客)筆者在寫(xiě)完入門(mén)動(dòng)畫(huà)一之后偷懶了不少兽间,沒(méi)有繼續(xù)完成入門(mén)動(dòng)畫(huà)后續(xù)博客历葛,在這里一次補(bǔ)上啦!
之前介紹的是UIView動(dòng)畫(huà)的第一篇--block動(dòng)畫(huà)嘀略。而這篇是UIView動(dòng)畫(huà)之CABasicAnimation恤溶。
CABasicAnimation類的使用方式就是基本的關(guān)鍵幀動(dòng)畫(huà)。
所謂關(guān)鍵幀動(dòng)畫(huà)帜羊,就是將Layer的屬性作為KeyPath來(lái)注冊(cè)咒程,指定動(dòng)畫(huà)的起始幀和結(jié)束幀,然后自動(dòng)計(jì)算和實(shí)現(xiàn)中間的過(guò)渡動(dòng)畫(huà)的一種動(dòng)畫(huà)方式讼育。
那么我們來(lái)簡(jiǎn)單入門(mén)學(xué)習(xí)一下帐姻!let's go!

CABasicAnimation的基本使用方法

1.引用QuartzCore.framework

import <QuartzCore/QuartzCore.h> 

2.CABaseAnimation的實(shí)例化以及關(guān)鍵路徑的注冊(cè)

CABasicAnimation *positionAnima = [CABasicAnimation animationWithKeyPath:@"position"];

3.設(shè)定動(dòng)畫(huà)的屬性和說(shuō)明

屬性 說(shuō)明
duration 動(dòng)畫(huà)時(shí)長(zhǎng)(秒為單位)
repeatCount 重復(fù)次數(shù)奶段。永久重復(fù)的話設(shè)置為HUGE_VALF
beginTime 指定動(dòng)畫(huà)開(kāi)始時(shí)間饥瓷。從開(kāi)始指定延遲幾秒執(zhí)行的話,請(qǐng)?jiān)O(shè)置為“CACurrentMediaTime() + 秒數(shù)”的形式
timingFunction 設(shè)定動(dòng)畫(huà)的速度變化
autoreverses 動(dòng)畫(huà)結(jié)束時(shí)是否執(zhí)行逆動(dòng)畫(huà) (默認(rèn)為NO)
fromValue 所改變屬性的起始值 (起始值是一個(gè)絕對(duì)值)
toValue 所改變屬性的結(jié)束時(shí)的值(終了值是一個(gè)絕對(duì)值)
byValue 所改變屬性相同起始值的改變量 (終了值是一個(gè)相對(duì)值)
speed 改變動(dòng)畫(huà)的速度
//    動(dòng)畫(huà)時(shí)長(zhǎng)
        positionAnima.duration = 0.8;
// 設(shè)定動(dòng)畫(huà)起始幀和結(jié)束幀
    // 起始點(diǎn)
    positionAnima.fromValue = [NSValue valueWithCGPoint:CGPointMake(_label.center.x,  _label.center.y)];
    // 終了點(diǎn)
    positionAnima.toValue = [NSValue valueWithCGPoint:CGPointMake(_label.center.x + 100, _label.center.y + 100)];
// 動(dòng)畫(huà)先加速后減速  
    positionAnima.timingFunction = [CAMediaTimingFunction kCAMediaTimingFunctionEaseInEaseOut];
//    beginTime 指定動(dòng)畫(huà)開(kāi)始時(shí)間痹籍。從開(kāi)始指定延遲幾秒執(zhí)行的話呢铆,請(qǐng)?jiān)O(shè)置為「CACurrentMediaTime() + 秒數(shù)」的形式。
positionAnima.beginTime = CACurrentMediaTime() + 2;
//        設(shè)置重復(fù)次數(shù)
    positionAnima.repeatCount = 1;

4.添加動(dòng)畫(huà)

為L(zhǎng)ayer添加設(shè)置完成的動(dòng)畫(huà)蹲缠,可以給Key指定任意名字棺克。

[_label.layer addAnimation:positionAnima forKey:@"AnimationMove"];

這里有兩點(diǎn)需要注意一下
(1)一個(gè) CABasicAniamtion 的實(shí)例對(duì)象只是一個(gè)數(shù)據(jù)模型,和他綁定到哪一個(gè)layer上是沒(méi)有關(guān)系的
(2)方法addAnimation:forKey:是將 CABasicAniamtion 對(duì)象進(jìn)行了 copy 操作的线定。所以在將其添加到一個(gè)layer上之后娜谊,我們還是將其再次添加到另一個(gè)layer上的。

5.防止動(dòng)畫(huà)結(jié)束后回到初始狀態(tài)

只需設(shè)置removedOnCompletion斤讥、fillMode兩個(gè)屬性就可以了纱皆。

    positionAnima.removedOnCompletion = NO;
    positionAnima.fillMode = kCAFillModeForwards;

這里需要注意一下,為什么動(dòng)畫(huà)結(jié)束后返回原狀態(tài)。
首先我們需要搞明白一點(diǎn)的是派草,layer動(dòng)畫(huà)運(yùn)行的過(guò)程是怎樣的撑帖?其實(shí)在我們給一個(gè)視圖添加layer動(dòng)畫(huà)時(shí),真正移動(dòng)并不是我們的視圖本身澳眷,而是 presentation layer (是Layer的顯示層)的一個(gè)緩存胡嘿。動(dòng)畫(huà)開(kāi)始時(shí) presentation layer開(kāi)始移動(dòng),原始layer隱藏钳踊,動(dòng)畫(huà)結(jié)束時(shí)衷敌,presentation layer從屏幕上移除,原始layer顯示拓瞪。這就解釋了為什么我們的視圖在動(dòng)畫(huà)結(jié)束后又回到了原來(lái)的狀態(tài)缴罗,因?yàn)樗揪蜎](méi)動(dòng)過(guò)。
這個(gè)同樣也可以解釋為什么在動(dòng)畫(huà)移動(dòng)過(guò)程中祭埂,我們?yōu)楹尾荒軐?duì)其進(jìn)行任何操作面氓。
如果覺(jué)得上面這段話理解起來(lái)有困難那我們來(lái)看一下圖示。
經(jīng)過(guò)動(dòng)畫(huà)之后能看到label已經(jīng)移動(dòng)

動(dòng)畫(huà).gif

但實(shí)際上我們使用XCode觀察圖層發(fā)現(xiàn)label并沒(méi)有真正的移動(dòng)蛆橡。

屏幕快照 2017-06-21 下午2.50.41.png

也就是說(shuō)真正移動(dòng)并不是我們的視圖本身舌界,而是 presentation layer (是Layer的顯示層)的一個(gè)緩存。原始layer并沒(méi)有移動(dòng)泰演。
注意:在動(dòng)畫(huà)執(zhí)行完成之后呻拌,最好還是將動(dòng)畫(huà)移除掉。也就是盡量不要設(shè)置removedOnCompletion屬性為NO

6.關(guān)于fillMode屬性的理解

(由于逛過(guò)CoderIvan的博客睦焕,這一部分寫(xiě)的很好藐握,加上博主本人繪圖能力差這里便摘錄參考)
該屬性定義了你的動(dòng)畫(huà)在開(kāi)始和結(jié)束時(shí)的動(dòng)作。默認(rèn)值是 kCAFillModeRemoved垃喊。
取值的解釋
kCAFillModeRemoved 設(shè)置為該值猾普,動(dòng)畫(huà)將在設(shè)置的 beginTime 開(kāi)始執(zhí)行(如沒(méi)有設(shè)置beginTime屬性,則動(dòng)畫(huà)立即執(zhí)行)本谜,動(dòng)畫(huà)執(zhí)行完成后將會(huì)layer的改變恢復(fù)原狀初家。

kCAFillModeRemoved

kCAFillModeForwards 設(shè)置為該值,動(dòng)畫(huà)即使之后layer的狀態(tài)將保持在動(dòng)畫(huà)的最后一幀耕突,而removedOnCompletion的默認(rèn)屬性值是 YES笤成,所以為了使動(dòng)畫(huà)結(jié)束之后layer保持結(jié)束狀態(tài)评架,應(yīng)將removedOnCompletion設(shè)置為NO眷茁。

kCAFillModeForwards

kCAFillModeBackwards 設(shè)置為該值,將會(huì)立即執(zhí)行動(dòng)畫(huà)的第一幀纵诞,不論是否設(shè)置了 beginTime屬性上祈。觀察發(fā)現(xiàn),設(shè)置該值,剛開(kāi)始視圖不見(jiàn)登刺,還不知道應(yīng)用在哪里籽腕。

kCAFillModeBackwards

kCAFillModeBoth 該值是 kCAFillModeForwards 和 kCAFillModeBackwards的組合狀態(tài)

kCAFillModeBoth

7.關(guān)于Animation Easing的使用

(由于逛過(guò)CoderIvan的博客,這一部分寫(xiě)的很好纸俭,加上博主本人繪圖能力差這里便摘錄參考)
也即是屬性timingFunction值的設(shè)定皇耗,有種方式來(lái)獲取屬性值
(1)使用方法functionWithName:
這種方式很簡(jiǎn)單,這里只是簡(jiǎn)單說(shuō)明一下取值的含義:
kCAMediaTimingFunctionLinear 傳這個(gè)值揍很,在整個(gè)動(dòng)畫(huà)時(shí)間內(nèi)動(dòng)畫(huà)都是以一個(gè)相同的速度來(lái)改變郎楼。也就是勻速運(yùn)動(dòng)。
kCAMediaTimingFunctionEaseIn 使用該值窒悔,動(dòng)畫(huà)開(kāi)始時(shí)會(huì)較慢呜袁,之后動(dòng)畫(huà)會(huì)加速。

kCAMediaTimingFunctionEaseIn

KCAMediaTimingFunctionEaseOut 使用該值简珠,動(dòng)畫(huà)在開(kāi)始時(shí)會(huì)較快阶界,之后動(dòng)畫(huà)速度減慢。

KCAMediaTimingFunctionEaseOut

KCAMediaTimingFunctionEaseInEaseOut

使用該值聋庵,動(dòng)畫(huà)在開(kāi)始和結(jié)束時(shí)速度較慢膘融,中間時(shí)間段內(nèi)速度較快。

KCAMediaTimingFunctionEaseInEaseOut

8.其他屬性

positionAnima.speed = 2;

或者在layer上設(shè)置speed屬性祭玉,這樣在該視圖上的所有動(dòng)畫(huà)都提速托启,該視圖上的所有子視圖上的動(dòng)畫(huà)也會(huì)提速。
注意:
(1) 如果設(shè)置動(dòng)畫(huà)時(shí)間為8s攘宙,speed設(shè)置為2屯耸,則只需4s動(dòng)畫(huà)就能執(zhí)行完。
(2)如果同時(shí)設(shè)置了動(dòng)畫(huà)的speed和layer 的speed蹭劈,則實(shí)際的speed為兩者相乘疗绣。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市铺韧,隨后出現(xiàn)的幾起案子多矮,更是在濱河造成了極大的恐慌,老刑警劉巖哈打,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件塔逃,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡料仗,警方通過(guò)查閱死者的電腦和手機(jī)湾盗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)立轧,“玉大人格粪,你說(shuō)我怎么就攤上這事躏吊。” “怎么了帐萎?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵比伏,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我疆导,道長(zhǎng)赁项,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任澈段,我火速辦了婚禮肤舞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘均蜜。我一直安慰自己李剖,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布囤耳。 她就那樣靜靜地躺著篙顺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪充择。 梳的紋絲不亂的頭發(fā)上德玫,一...
    開(kāi)封第一講書(shū)人閱讀 52,156評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音椎麦,去河邊找鬼宰僧。 笑死,一個(gè)胖子當(dāng)著我的面吹牛观挎,可吹牛的內(nèi)容都是我干的琴儿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼嘁捷,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼造成!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起雄嚣,我...
    開(kāi)封第一講書(shū)人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤晒屎,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后缓升,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體鼓鲁,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年港谊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了骇吭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡封锉,死狀恐怖绵跷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情成福,我是刑警寧澤碾局,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站奴艾,受9級(jí)特大地震影響净当,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蕴潦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一像啼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧潭苞,春花似錦忽冻、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至蝗碎,卻和暖如春湖笨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蹦骑。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工慈省, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人眠菇。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓边败,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親捎废。 傳聞我的和親對(duì)象是個(gè)殘疾皇子放闺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

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

  • 在iOS中隨處都可以看到絢麗的動(dòng)畫(huà)效果,實(shí)現(xiàn)這些動(dòng)畫(huà)的過(guò)程并不復(fù)雜缕坎,今天將帶大家一窺ios動(dòng)畫(huà)全貌怖侦。在這里你可以看...
    每天刷兩次牙閱讀 8,510評(píng)論 6 30
  • 在iOS中隨處都可以看到絢麗的動(dòng)畫(huà)效果,實(shí)現(xiàn)這些動(dòng)畫(huà)的過(guò)程并不復(fù)雜谜叹,今天將帶大家一窺iOS動(dòng)畫(huà)全貌匾寝。在這里你可以看...
    F麥子閱讀 5,115評(píng)論 5 13
  • 在iOS實(shí)際開(kāi)發(fā)中常用的動(dòng)畫(huà)無(wú)非是以下四種:UIView動(dòng)畫(huà),核心動(dòng)畫(huà)荷腊,幀動(dòng)畫(huà)艳悔,自定義轉(zhuǎn)場(chǎng)動(dòng)畫(huà)。 1.UIView...
    請(qǐng)叫我周小帥閱讀 3,106評(píng)論 1 23
  • Core Animation Core Animation女仰,中文翻譯為核心動(dòng)畫(huà)猜年,它是一組非常強(qiáng)大的動(dòng)畫(huà)處理API抡锈,...
    45b645c5912e閱讀 3,032評(píng)論 0 21
  • 修煉2 :培養(yǎng)觀看的習(xí)慣(讀書(shū)筆記) 在一次“微夢(mèng)想”的日打卡中,我發(fā)了一張照片乔外,并寫(xiě)道: 如何用手機(jī)拍出一張好照...
    小zhu先生閱讀 309評(píng)論 0 0