iOS核心動(dòng)畫(huà)(CoreAnimation)之CABasicAnimation的使用

了解CoreAnimation

  • CoreAnimation是蘋(píng)果提供的一套基于繪圖的動(dòng)畫(huà)框架席赂。


    image

    上圖是蘋(píng)果給出的體系結(jié)構(gòu),最低層是硬件層(GPU),上層是OpenGL和CoreGraphics,再上層CoreAnimation,最上層就是UIKit.
    所以CoreAnimation是基于OpenGL和CoreGraphics封裝的,并不是直接接觸硬件層.

  • CoreAnimation不是一個(gè)獨(dú)立框架矛渴,而是封裝在QuartzCore框架中.
  • CoreAnimation是作用于layer,不是View,這點(diǎn)要注意.

CABasicAnimation使用

CoreAnimation包含了許多的高級(jí)動(dòng)畫(huà)效果,CABasicAnimation只是其中一小部分,也是最基礎(chǔ)動(dòng)畫(huà).
CABasicAnimation的常用屬性詳解

  • timingFunction 可選
    控制動(dòng)畫(huà)的運(yùn)行節(jié)奏椎扬;有以下5種類(lèi)型
類(lèi)型 描述
kCAMediaTimingFunctionLinear 均速(線性運(yùn)行)
kCAMediaTimingFunctionEaseIn 先緩慢進(jìn)入,再加速離開(kāi)
kCAMediaTimingFunctionEaseOut 全速開(kāi)始具温,慢慢減速
kCAMediaTimingFunctionEaseInEaseOut 先慢慢加速蚕涤,再慢慢減速。
kCAMediaTimingFunctionDefault 默認(rèn)值.先慢慢加速铣猩,再慢慢減速揖铜,但是它加速減速速度略慢
  • fromValue 必選
    動(dòng)畫(huà)初始值(狀態(tài)).類(lèi)型:NSValue NSNumber

  • toValue 必選
    動(dòng)畫(huà)結(jié)束值(狀態(tài)).類(lèi)型:NSValue NSNumber

  • duration 必選
    每次動(dòng)畫(huà)時(shí)間

  • autoreverses 可選
    默認(rèn)為NO,當(dāng)設(shè)置為YES時(shí),表示啟用回退動(dòng)畫(huà),即由toValue到fromValue做回退動(dòng)畫(huà)

  • removedOnCompletion 可選
    默認(rèn)為YES,動(dòng)畫(huà)結(jié)束后從layer移除,當(dāng)設(shè)置為NO時(shí),不移除

  • fillMode 可選
    控制動(dòng)畫(huà)開(kāi)始之前或者動(dòng)畫(huà)結(jié)束之后layer的行為.有以下4種類(lèi)型

類(lèi)型 描述
kCAFillModeForwards 在動(dòng)畫(huà)開(kāi)始前,只需要將動(dòng)畫(huà)加入了一個(gè)layer达皿,layer便立即進(jìn)入動(dòng)畫(huà)的初始狀態(tài)并等待動(dòng)畫(huà)開(kāi)始
kCAFillModeBackwards 當(dāng)動(dòng)畫(huà)結(jié)束后蛮位,layer會(huì)一直保持著動(dòng)畫(huà)最后的狀態(tài)
kCAFillModeBoth 動(dòng)畫(huà)加入之后在開(kāi)始之前,layer便處于動(dòng)畫(huà)初始狀態(tài)鳞绕,動(dòng)畫(huà)結(jié)束后layer保持動(dòng)畫(huà)最后的狀態(tài)
kCAFillModeRemoved 默認(rèn)值.動(dòng)畫(huà)結(jié)束后,不改變layer的狀態(tài),layer會(huì)恢復(fù)到之前的狀態(tài)
  • repeatCount 可選
    動(dòng)畫(huà)重復(fù)次數(shù).默認(rèn)為0,不可與repeatDuration同時(shí)使用.(非重復(fù)動(dòng)畫(huà)不用關(guān)注此參數(shù))

  • repeatDuration 可選
    動(dòng)畫(huà)重復(fù)時(shí)間.不可與repeatCount同時(shí)使用,(系統(tǒng)會(huì)根據(jù) repeatDuration/duration 計(jì)算出要做多少次動(dòng)畫(huà)).(非重復(fù)動(dòng)畫(huà)不用關(guān)注此參數(shù))

動(dòng)畫(huà)實(shí)現(xiàn)

- (void)myAnimation {
    
    NSString *keyPath = @"position";
    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:keyPath];
    
    // 速度控制函數(shù)失仁,控制動(dòng)畫(huà)運(yùn)行的節(jié)奏
    animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    
    // YES=啟用回退動(dòng)畫(huà),即由toValue到fromValue做回退動(dòng)畫(huà)
    animation.autoreverses = YES;
    
    // YES=動(dòng)畫(huà)結(jié)束時(shí)從layer移除
    animation.removedOnCompletion = YES;
    
    // 控制動(dòng)畫(huà)開(kāi)始之前或者動(dòng)畫(huà)結(jié)束之后`layer`的行為
    animation.fillMode = kCAFillModeForwards;

    // 動(dòng)畫(huà)初始值(狀態(tài)),必須設(shè)置
    animation.fromValue = [NSValue valueWithCGPoint:self.interactView.center];

    // 動(dòng)畫(huà)結(jié)束值(狀態(tài))们何,必須設(shè)置
    animation.toValue = [NSValue valueWithCGPoint:self.targetView.center];
    
    // 重復(fù)次數(shù)
    animation.repeatCount = INT_MAX;
 
    // 每次動(dòng)畫(huà)時(shí)間萄焦,必須設(shè)置
    animation.duration = 1.8;
    
    // 添加到layer,并開(kāi)始動(dòng)冤竹;必須設(shè)置
    [arrowView.layer addAnimation:animation forKey:keyPath];
}

上面代碼的動(dòng)畫(huà)效果

image

KeyPath 列表

Apple官方鏈接:CALayer Animatable Properties


注意: CoreAnimation是作用于layer,layer并沒(méi)有frame屬性,所以對(duì)frame是無(wú)效的,可通過(guò)positionbounds間接實(shí)現(xiàn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拂封,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子鹦蠕,更是在濱河造成了極大的恐慌冒签,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钟病,死亡現(xiàn)場(chǎng)離奇詭異萧恕,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)肠阱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)票唆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人屹徘,你說(shuō)我怎么就攤上這事走趋。” “怎么了噪伊?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵簿煌,是天一觀的道長(zhǎng)氮唯。 經(jīng)常有香客問(wèn)我,道長(zhǎng)姨伟,這世上最難降的妖魔是什么惩琉? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮授滓,結(jié)果婚禮上琳水,老公的妹妹穿的比我還像新娘肆糕。我一直安慰自己般堆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布诚啃。 她就那樣靜靜地躺著淮摔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪始赎。 梳的紋絲不亂的頭發(fā)上和橙,一...
    開(kāi)封第一講書(shū)人閱讀 51,488評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音造垛,去河邊找鬼魔招。 笑死,一個(gè)胖子當(dāng)著我的面吹牛五辽,可吹牛的內(nèi)容都是我干的办斑。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼杆逗,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼乡翅!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起罪郊,我...
    開(kāi)封第一講書(shū)人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蠕蚜,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后悔橄,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體靶累,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年癣疟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了尺铣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡争舞,死狀恐怖凛忿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情竞川,我是刑警寧澤店溢,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布叁熔,位于F島的核電站,受9級(jí)特大地震影響床牧,放射性物質(zhì)發(fā)生泄漏荣回。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一戈咳、第九天 我趴在偏房一處隱蔽的房頂上張望心软。 院中可真熱鬧,春花似錦著蛙、人聲如沸删铃。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)猎唁。三九已至,卻和暖如春顷蟆,著一層夾襖步出監(jiān)牢的瞬間诫隅,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工帐偎, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留逐纬,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓削樊,卻偏偏與公主長(zhǎng)得像豁生,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子嫉父,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

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