核心動(dòng)畫(huà)提供了一系列在應(yīng)用中可以使用的動(dòng)畫(huà)垦写。
動(dòng)畫(huà)類(lèi)型
- CAAnimation 是所有動(dòng)畫(huà)的一個(gè)基類(lèi)坪哄。CAAnimation遵守?fù)碛袆?dòng)畫(huà)持續(xù)時(shí)長(zhǎng)担映、速度以及重復(fù)次數(shù)的CAMediaTiming協(xié)議持痰。CAAnimation也遵守了CAAction協(xié)議修陡,該協(xié)議可以響應(yīng)由layer層的拖拽所產(chǎn)生的彈簧動(dòng)畫(huà)效果朽缴。CAAnimation將動(dòng)畫(huà)的節(jié)奏定義為CAMediaTimingFunction實(shí)例對(duì)象善玫。這個(gè)節(jié)奏就是以貝塞爾曲線的方式描述動(dòng)畫(huà)的執(zhí)行節(jié)奏,線性就表示該動(dòng)畫(huà)在持續(xù)時(shí)間內(nèi)的執(zhí)行速度是勻速的密强,而ease-in也就是說(shuō)這個(gè)動(dòng)畫(huà)在一開(kāi)始進(jìn)來(lái)的時(shí)候是緩慢的茅郎,但是越到末尾的時(shí)候速度就會(huì)越來(lái)越快。
- CAPropertyAnimation是一個(gè)繼承自CAAnimation的一個(gè)基類(lèi)或渤,可以通過(guò)key path的訪問(wèn)來(lái)對(duì)layer層的屬性執(zhí)行動(dòng)畫(huà)效果系冗。
- CABasicAnimation繼承自CAPropertyAnimation的可以為layer屬性提供簡(jiǎn)單的插入的動(dòng)畫(huà)。
- CAKeyframeAnimation也是繼承自CAPropertyAnimation薪鹦,可以執(zhí)行key frame的動(dòng)畫(huà)效果掌敬。通過(guò)定義layer層屬性動(dòng)畫(huà)的key path 以及動(dòng)畫(huà)在每個(gè)階段的不同值,以及動(dòng)畫(huà)的執(zhí)行次數(shù)和動(dòng)畫(huà)節(jié)奏池磁。在動(dòng)畫(huà)執(zhí)行的過(guò)程中奔害,就會(huì)將所設(shè)置的動(dòng)畫(huà)屬性值插入到動(dòng)畫(huà)里。
- CATransition是一個(gè)影響全部?jī)?nèi)容的一個(gè)轉(zhuǎn)場(chǎng)動(dòng)畫(huà)地熄,可以漸隱华临、push進(jìn)來(lái)以及在動(dòng)畫(huà)過(guò)程中reveal layer層內(nèi)容。
- CAAnimationGroup可以同時(shí)執(zhí)行一組好幾個(gè)動(dòng)畫(huà)效果端考。
圖1 展示的是動(dòng)畫(huà)效果之間的層級(jí)關(guān)系并且總結(jié)了可用的動(dòng)畫(huà)屬性雅潭。
圖1 核心動(dòng)畫(huà)類(lèi)以及協(xié)議
Timing,Timingspaces以及CAAnimation
動(dòng)畫(huà)的本質(zhì)就是描述一個(gè)屬性值隨著時(shí)間的變化揭厚。核心動(dòng)畫(huà)為動(dòng)畫(huà)和layer提供了基本的節(jié)奏函數(shù),有強(qiáng)大的性能寻馏。
Media Timing Protocol
核心動(dòng)畫(huà)通過(guò)CAMediaTiming協(xié)議來(lái)描述時(shí)間模型棋弥,而且被CAAnimation及其子類(lèi)所遵守核偿。時(shí)間模型明確了一個(gè)動(dòng)畫(huà)的持續(xù)時(shí)間诚欠、速度以及循環(huán)次數(shù)。
CAMediaTiming協(xié)議也被CALayer層所遵守漾岳,可以使層定義一個(gè)相對(duì)于父層的一個(gè)時(shí)空轰绵;
動(dòng)畫(huà)或者層的speed屬性表示這種縮放因子。例如尼荆,一個(gè)10秒的動(dòng)畫(huà)左腔,那么一個(gè)速度為2的layer則會(huì)花費(fèi)5秒的時(shí)間來(lái)執(zhí)行這個(gè)動(dòng)畫(huà)。如果這個(gè)層的子層也定義一個(gè)速度為2的因子捅儒,那么這個(gè)動(dòng)畫(huà)就會(huì)在原來(lái)的1/4的時(shí)間內(nèi)執(zhí)行完畢液样。
duration屬性表示一個(gè)動(dòng)畫(huà)單次執(zhí)行所需要的總時(shí)間(以秒為單位)。CAAnimation的默認(rèn)時(shí)間是0秒巧还,如果沒(méi)有定義時(shí)間的話鞭莽,那么動(dòng)畫(huà)持續(xù)時(shí)間就是0.25秒。
時(shí)間洗衣通過(guò)beginTime和timeOffset兩個(gè)屬性來(lái)開(kāi)始一個(gè)動(dòng)畫(huà)麸祷。beginTime表示在執(zhí)行動(dòng)畫(huà)的層所在時(shí)空的開(kāi)始時(shí)間澎怒,而timeOffset則是一個(gè)附加的offset,但是是以當(dāng)前時(shí)間為基準(zhǔn)的阶牍。兩個(gè)屬性相結(jié)合來(lái)表示動(dòng)畫(huà)開(kāi)始的時(shí)間喷面。
Repeatin Animations
CAMediaTiming協(xié)議用repeatCount和repeatDuration來(lái)表示一個(gè)動(dòng)畫(huà)重復(fù)執(zhí)行的次數(shù)。repeatCount屬性可以是極小的數(shù)字走孽,表示的是一個(gè)動(dòng)畫(huà)重復(fù)執(zhí)行的次數(shù)惧辈。將一個(gè)10秒動(dòng)畫(huà)的重復(fù)執(zhí)行次數(shù)repeatCount設(shè)置為2.5就表示這個(gè)動(dòng)畫(huà)將會(huì)執(zhí)行25秒,并且將會(huì)停在迭代到第三圈的一半的時(shí)候磕瓷。如果將該屬性設(shè)置為1e100f那么這個(gè)動(dòng)畫(huà)將會(huì)一直持續(xù)著咬像,直到將這個(gè)layer移除掉。
repeatDuration屬性與repeatCount屬性類(lèi)似生宛,雖然它是以秒為單位而不是以迭代周期為單位县昂。repeatDuration也可以是一個(gè)很小的數(shù)。
autoreverses屬性表示陷舅,在假設(shè)當(dāng)前動(dòng)畫(huà)可以執(zhí)行多次的情況下倒彰,當(dāng)正向執(zhí)行完畢后是否可以反向執(zhí)行動(dòng)畫(huà)。
Fill Mode
fillMode屬性表示一個(gè)動(dòng)畫(huà)在執(zhí)行之外是一個(gè)什么狀態(tài)莱睁。動(dòng)畫(huà)可以停在起始位置也可以是結(jié)束點(diǎn)位置或者是完全移除待讳。默認(rèn)行為是在動(dòng)畫(huà)執(zhí)行完畢之后移除動(dòng)畫(huà)效果芒澜。
Animation Pacing
動(dòng)畫(huà)的節(jié)奏也就是指那些插入的值如何在動(dòng)畫(huà)執(zhí)行期間展現(xiàn)出來(lái),使用恰當(dāng)合適的節(jié)奏可以加強(qiáng)用戶對(duì)該動(dòng)畫(huà)效果的印象创淡。
動(dòng)畫(huà)的節(jié)奏由以貝塞爾曲線所表示的時(shí)間函數(shù)來(lái)表達(dá)痴晦。
CAAnimation的時(shí)間函數(shù)屬性定義了一個(gè)CAMediaTimingFunction實(shí)例對(duì)象來(lái)概括時(shí)間函數(shù)。CAMediaTimingFunction可以定義一般的曲線以及由兩個(gè)控制點(diǎn)所形成的曲線琳彩。
常用的CAMediaTimingFunction有以下幾種:
- kCAMediaTimingFunctionLinear表示動(dòng)畫(huà)勻速執(zhí)行誊酌。
- kCAMediaTimingFunctionEaseIn表示動(dòng)畫(huà)開(kāi)始的時(shí)候執(zhí)行速度比較慢,但是越到后面執(zhí)行速度越快露乏。
- kCAMediaTimingFunctionEaseOut表示動(dòng)畫(huà)開(kāi)始的執(zhí)行速度比較快碧浊,但是到后面的時(shí)候執(zhí)行速度就會(huì)越來(lái)越慢。
- kCAMediaTimingFunctionEaseInEaseOut表示動(dòng)畫(huà)的執(zhí)行屬于兩頭比較慢瘟仿,但是中間執(zhí)行速度較快的那種箱锐。
圖2 表示的是動(dòng)畫(huà)執(zhí)行的貝塞爾曲線表示