iOS CABasicAnimation詳解

最近一直在看關(guān)于CALayer的相關(guān)知識(shí)诞仓,這里整理一下CABasicAnimation相關(guān)知識(shí)
1.CAlayer
2.CoreAnimation
3.anchorPoint(錨點(diǎn))
4.CABasicAnimation

一售貌、關(guān)于CAlayer

CoreAnimation是基于CAlayer層的動(dòng)畫(huà)险领,CAlayer是定義在QuartzCore框架中的(Core Animation)
蘋(píng)果對(duì)于CAlayer的概述
CAlayer管理基于圖像的內(nèi)容并允許您對(duì)該內(nèi)容執(zhí)行動(dòng)畫(huà)的對(duì)象
層通常用于為視圖提供后備存儲(chǔ),但也可以使用业踏,而無(wú)需顯示內(nèi)容韵丑。層的主要工作是管理您提供的視覺(jué)內(nèi)容僻孝,但圖層本身具有可設(shè)置的可視屬性导帝,例如背景顏色,邊框和陰影穿铆。除了管理視覺(jué)內(nèi)容之外您单,該層還保留有關(guān)其內(nèi)容的幾何形狀的信息(例如其位置,大小和變換)荞雏,用于在屏幕上呈現(xiàn)該內(nèi)容虐秦。
修改圖層的屬性是如何啟動(dòng)圖層內(nèi)容或幾何圖形的動(dòng)畫(huà)。層對(duì)象通過(guò)采用定義層的定時(shí)信息的協(xié)議來(lái)封裝層的持續(xù)時(shí)間和起始位置及其動(dòng)畫(huà)凤优。CAMediaTiming
如果圖層對(duì)象是由視圖創(chuàng)建的悦陋,則視圖通常會(huì)自動(dòng)分配為圖層的委托,并且不應(yīng)更改該關(guān)系筑辨。對(duì)于您自己創(chuàng)建的圖層俺驶,可以分配delegate對(duì)象并使用該對(duì)象動(dòng)態(tài)提供圖層的內(nèi)容并執(zhí)行其他任務(wù)。圖層也可能具有布局管理器對(duì)象(分配給該屬性)以分別管理子視圖的布局棍辕。layoutManager

CALayer.png

CALayer屬性.png

CAlayer遵循CAMeidaTiming協(xié)議,CABasicAnimation繼承于CAPropertyAnimation,CAPropertyAnimation繼承于CAAnimation而CAAnimation遵CAMeidaTiming協(xié)議

CAMediaTiming屬性列表

屬性 類型 說(shuō)明
beginTime CFTimeInterval 指定接收方相對(duì)于其父對(duì)象(如果適用)的開(kāi)始時(shí)間暮现。
timeOffset CFTimeInterval 指定活動(dòng)本地時(shí)間的額外時(shí)間偏移量。
repeatCount float 確定動(dòng)畫(huà)重復(fù)的次數(shù)楚昭。
repeatDuration CFTimeInterval 確定動(dòng)畫(huà)重復(fù)的秒數(shù)栖袋。
duration CFTimeInterval 指定動(dòng)畫(huà)的基本持續(xù)時(shí)間,以秒為單位抚太。
speed float 指定從父時(shí)間空間將時(shí)間映射到接收者的時(shí)間空間塘幅。
autoreverses BOOL 確定動(dòng)畫(huà)在完成后是否相反執(zhí)行
fillMode NSString 確定接收者的演示文稿是否在其活動(dòng)持續(xù)時(shí)間完成后被凍結(jié)或刪除昔案。

FillMode
這些常數(shù)決定了定時(shí)對(duì)象在其活動(dòng)持續(xù)時(shí)間完成后的行為。默認(rèn)值是 kCAFillModeRemoved电媳。

FillMode.png

二踏揣、CAAnimation

CAAnimation可以分為以下幾類:

  • CABasicAnimation
    基礎(chǔ)動(dòng)畫(huà),通過(guò)設(shè)定起始點(diǎn)匆背,終點(diǎn)呼伸,時(shí)間,動(dòng)畫(huà)會(huì)沿著你這設(shè)定點(diǎn)進(jìn)行移動(dòng)钝尸。可以看做特殊的CAKeyFrameAnimation
  • CAKeyframeAnimation
    關(guān)鍵幀動(dòng)畫(huà)搂根,可定制度比CABasicAnimation高珍促,也是本系列的接下來(lái)的內(nèi)容
  • CAAnimationGroup
    組動(dòng)畫(huà),支持多個(gè)CABasicAnimation或者CAKeyframeAnimation動(dòng)畫(huà)同時(shí)執(zhí)行
繼承關(guān)系.jpg
  • CAAnimation 是一個(gè)抽象類剩愧, 遵循了CAMediaTiming協(xié)議和CAAction協(xié)議 我們不能直接使用CAAnimation類 而是使用其子類猪叙;
  • CATransition:提供漸變效果,比如推拉push效果仁卷,消退fade效果穴翩,揭開(kāi)reveal 效果
  • CAAnimationGroup 允許多個(gè)動(dòng)畫(huà)同時(shí)播放
  • CABasicAnimation 提供了對(duì)單一動(dòng)畫(huà)的實(shí)現(xiàn)
  • CAKeyframeAnimation 關(guān)鍵幀動(dòng)畫(huà) 可以定義動(dòng)畫(huà)路線
  • CAPropertyAnimation 屬性動(dòng)畫(huà) 通常不直接使用,而是使用CABasicAnimation子類

** CABasicAnimation屬性及說(shuō)明**


屬性和說(shuō)明.jpeg

CABasicAnimation提供了最基礎(chǔ)的動(dòng)畫(huà)屬性設(shè)置锦积,是簡(jiǎn)單的keyframe動(dòng)畫(huà)性能芒帕。CABasicAnimation可以看做是一種CAKeyframeAnimation的簡(jiǎn)單動(dòng)畫(huà),因?yàn)樗挥蓄^尾的關(guān)鍵幀(keyframe)丰介。

我們可以創(chuàng)建一個(gè)CABasicAnimaiton的對(duì)象通過(guò)keyPath的方式背蟆。CABasicAnimation提供了fromValue、toValue哮幢、byValue的設(shè)置(插值)带膀。它們?nèi)齻€(gè)屬性定義了一個(gè)動(dòng)畫(huà)的軌跡,并且最少兩個(gè)值不能為空橙垢。

當(dāng)設(shè)置了CABasicAnimation的起點(diǎn)與終點(diǎn)值后垛叨,中間的值都是通過(guò)插值方式計(jì)算出來(lái)的,插值計(jì)算是通過(guò)timingFunction來(lái)指定柜某,timingFunction默認(rèn)為空嗽元,使用liner(勻速運(yùn)動(dòng))。例如莺琳,當(dāng)我們?cè)O(shè)置了一個(gè)position的動(dòng)畫(huà)还棱,設(shè)置了開(kāi)始值PointA與結(jié)束值PointB,它們的運(yùn)動(dòng)先計(jì)算PointA與PointB的中間運(yùn)動(dòng)值PointCenter惭等,而PointCenter是由timingFunction來(lái)指定值的珍手,并且動(dòng)畫(huà)默認(rèn)是直線勻速運(yùn)動(dòng)的。

  • CABasicAnimation遵循CAMediaTiming所以擁有CAMediaTiming的屬性。

  • CABasicAnimation為圖層屬性提供基本的單關(guān)鍵幀動(dòng)畫(huà)功能的對(duì)象琳要。

  • 一個(gè) CABasicAniamtion 的實(shí)例對(duì)象只是一個(gè)數(shù)據(jù)模型

  • 速度控制函數(shù)(CAMediaTimingFunction)

  • kCAMediaTimingFunctionLinear(線性):勻速寡具,給你一個(gè)相對(duì)靜態(tài)的感覺(jué),這個(gè)是默認(rèn)的動(dòng)畫(huà)行為。

  • kCAMediaTimingFunctionEaseIn(漸進(jìn)):動(dòng)畫(huà)緩慢進(jìn)入稚补,然后加速離開(kāi)

  • kCAMediaTimingFunctionEaseOut(漸出):動(dòng)畫(huà)全速進(jìn)入童叠,然后減速的到達(dá)目的地

  • kCAMediaTimingFunctionEaseInEaseOut(漸進(jìn)漸出):動(dòng)畫(huà)緩慢的進(jìn)入,中間加速课幕,然后減速的到達(dá)目的地厦坛。

    CALayer *layer = [CALayer new];
    layer.frame = CGRectMake(100, 100, 100, 100);
    layer.backgroundColor = [UIColor redColor].CGColor;
    [self.view.layer addSublayer: layer];

    CABasicAnimation *animation  = [CABasicAnimation animationWithKeyPath:@"position"];
    animation.duration = 2;
    
    animation.fromValue = [NSValue valueWithCGPoint:layer.position];
    
    animation.toValue = [NSValue valueWithCGPoint:CGPointMake(300, 300)];
    //延時(shí) 1.0秒
    animation.beginTime = CACurrentMediaTime() + 1.0;
    // 指定動(dòng)畫(huà)重復(fù)是否累加
    animation.cumulative = NO;
    // 動(dòng)畫(huà)完成是否移除動(dòng)畫(huà)
    animation.removedOnCompletion = YES;
    // 設(shè)置移動(dòng)的效果為快入快出
    animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    // 設(shè)置無(wú)限循環(huán)動(dòng)畫(huà)
    animation.repeatCount = HUGE_VALF;
    // 設(shè)置動(dòng)畫(huà)完成時(shí),自動(dòng)以動(dòng)畫(huà)回到原點(diǎn)
    animation.autoreverses = YES;
    // 設(shè)置動(dòng)畫(huà)完成時(shí)乍惊,返回到原點(diǎn)
    animation.fillMode = kCAFillModeForwards;
    
    [layer addAnimation:animation forKey:nil];
  • 注意

** animation中的postion動(dòng)畫(huà)fromValue與fromValue均為layer的position杜秸,position與frame中origin不是同一個(gè)東西哦,開(kāi)始弄了半天動(dòng)畫(huà)位置一直不對(duì)润绎,才知道這里還有一個(gè)錨點(diǎn)的知識(shí)點(diǎn)撬碟。**

三、layer的position和anchorPoint(錨點(diǎn))兩個(gè)屬性

1.position(位置)
position是layer中的anchorPoint點(diǎn)在superLayer中的位置坐標(biāo)莉撇。
2.anchorPoint(錨點(diǎn))
anchorPoint點(diǎn)是相對(duì)layer的呢蛤,兩者是相對(duì)不同的坐標(biāo)空間的一個(gè)重合點(diǎn)。默認(rèn)的anchorPoint是(0.5,0.5)棍郎,與positon重合其障,當(dāng)我們?cè)O(shè)置了錨點(diǎn)之后,我們的視圖會(huì)根據(jù)設(shè)置的錨點(diǎn)來(lái)來(lái)進(jìn)行相對(duì)偏移坝撑。
看了許多相關(guān)文章静秆,有些說(shuō)錨點(diǎn)是相對(duì)于postition的個(gè)人感覺(jué)有點(diǎn)問(wèn)題,親自測(cè)試了一下巡李,改變layer的position后錨點(diǎn)還是0.50.5抚笔,只有l(wèi)ayer的位置發(fā)生了變化,所以得出結(jié)論position是相對(duì)于錨點(diǎn)的描述侨拦,描述的是當(dāng)前l(fā)ayer的錨點(diǎn)在superlayer的位置

錨點(diǎn)與位置測(cè)試.png

錨點(diǎn)與位置驗(yàn)證.png

蘋(píng)果Doc相關(guān)說(shuō)明
錨點(diǎn)影響位置.png

animationWithKeyPath值

說(shuō)明 value
transform.scale 比例轉(zhuǎn)化 @(0.8)
transform.scale.x 寬的比例 @(0.8)
transform.scale.y 高的比例 @(0.8)
transform.rotation.x 圍繞x軸旋轉(zhuǎn) @(M_PI)
transform.rotation.y 圍繞y軸旋轉(zhuǎn) @(M_PI)
transform.rotation.z 圍繞z軸旋轉(zhuǎn) @(M_PI)
cornerRadius 圓角的設(shè)置 @(50)
backgroundColor 背景顏色的變化 (id)[UIColor purpleColor].CGColor
bounds 大小殊橙,中心不變 [NSValue valueWithCGRect:CGRectMake(0, 0, 200, 200)];
position 位置(中心點(diǎn)的改變) [NSValue valueWithCGPoint:CGPointMake(300, 300)];
contents 內(nèi)容,比如UIImageView的圖片 imageAnima.toValue = (id)[UIImage imageNamed:@"to"].CGImage;
opacity 透明度 @(0.7)
contentsRect.size.width 橫向拉伸縮放 @(0.4)最好是0~1之間的
anchorPoint 錨點(diǎn)(相當(dāng)于改變position) [NSValue valueWithCGPoint:CGPointMake(1, 1)]

只要是CAlayer屬性中的支持隱式動(dòng)畫(huà)的都可以作為keypath的值

四狱从、CABasicAnimation

**CABasicAnimation為圖層屬性提供基本的單關(guān)鍵幀動(dòng)畫(huà)功能的對(duì)象最重要的三個(gè)屬性就是fromValue膨蛮、toValue、byValue **

屬性 說(shuō)明
fromValue 動(dòng)畫(huà)的效果變化的初始值
toValue 動(dòng)畫(huà)效果變化的結(jié)束值(絕對(duì)值)
byValue byValue;動(dòng)畫(huà)效果變化的結(jié)束值(相對(duì)值)
  • fromValue和toValue不為空季研,動(dòng)畫(huà)的效果會(huì)從fromValue的值變化到toValue敞葛。
  • fromValue和byValue都不為空,動(dòng)畫(huà)的效果將會(huì)從fromValue變化到fromValue+byValue与涡。
  • toValue 和byValue都不為空惹谐,動(dòng)畫(huà)的效果將會(huì)從toValue-byValue變化到toValue持偏。
  • 只有fromValue的值不為空,動(dòng)畫(huà)的效果將會(huì)從fromValue的值變化到當(dāng)前的狀態(tài)氨肌。
  • 只有toValue的值不為空鸿秆,動(dòng)畫(huà)的效果將會(huì)從當(dāng)前狀態(tài)的值變化到toValue的值。
  • 只有byValue的值不為空怎囚,動(dòng)畫(huà)的效果將會(huì)從當(dāng)前的值變化到(當(dāng)前狀態(tài)的值+byValue)的值卿叽。

相關(guān)資料

初探CALayer屬性
[Core Animation Programming Guide](Core Animation Programming Guide)
http://www.reibang.com/p/cd1bc0e82f4d
http://blog.jobbole.com/69111/
iOS 動(dòng)畫(huà)之CoreAnimation(CALayer)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市恳守,隨后出現(xiàn)的幾起案子考婴,更是在濱河造成了極大的恐慌,老刑警劉巖催烘,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蕉扮,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡颗圣,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)屁使,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)在岂,“玉大人,你說(shuō)我怎么就攤上這事蛮寂”挝纾” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵酬蹋,是天一觀的道長(zhǎng)及老。 經(jīng)常有香客問(wèn)我,道長(zhǎng)范抓,這世上最難降的妖魔是什么骄恶? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮匕垫,結(jié)果婚禮上僧鲁,老公的妹妹穿的比我還像新娘。我一直安慰自己象泵,他們只是感情好寞秃,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著偶惠,像睡著了一般春寿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上忽孽,一...
    開(kāi)封第一講書(shū)人閱讀 50,096評(píng)論 1 291
  • 那天绑改,我揣著相機(jī)與錄音谢床,去河邊找鬼。 笑死绢淀,一個(gè)胖子當(dāng)著我的面吹牛萤悴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播皆的,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼覆履,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了费薄?” 一聲冷哼從身側(cè)響起硝全,我...
    開(kāi)封第一講書(shū)人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎楞抡,沒(méi)想到半個(gè)月后伟众,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡召廷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年凳厢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片竞慢。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡先紫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出筹煮,到底是詐尸還是另有隱情遮精,我是刑警寧澤,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布败潦,位于F島的核電站本冲,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏劫扒。R本人自食惡果不足惜檬洞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望粟关。 院中可真熱鬧疮胖,春花似錦、人聲如沸闷板。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)遮晚。三九已至性昭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間县遣,已是汗流浹背糜颠。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工汹族, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人其兴。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓顶瞒,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親元旬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子榴徐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

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

  • 在iOS中隨處都可以看到絢麗的動(dòng)畫(huà)效果,實(shí)現(xiàn)這些動(dòng)畫(huà)的過(guò)程并不復(fù)雜匀归,今天將帶大家一窺ios動(dòng)畫(huà)全貌坑资。在這里你可以看...
    每天刷兩次牙閱讀 8,471評(píng)論 6 30
  • 在iOS中隨處都可以看到絢麗的動(dòng)畫(huà)效果,實(shí)現(xiàn)這些動(dòng)畫(huà)的過(guò)程并不復(fù)雜穆端,今天將帶大家一窺iOS動(dòng)畫(huà)全貌袱贮。在這里你可以看...
    F麥子閱讀 5,104評(píng)論 5 13
  • Core Animation Core Animation,中文翻譯為核心動(dòng)畫(huà)体啰,它是一組非常強(qiáng)大的動(dòng)畫(huà)處理API攒巍,...
    45b645c5912e閱讀 3,020評(píng)論 0 21
  • 本文轉(zhuǎn)載自:http://www.cocoachina.com/ios/20150105/10812.html 為...
    idiot_lin閱讀 1,250評(píng)論 0 1
  • 在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,082評(píng)論 1 23