iOS中的動(dòng)畫一般有兩種方式實(shí)現(xiàn),UIView Animation和Core Animation。
UiView動(dòng)畫是基于高層API封裝進(jìn)行封裝的,對(duì)UIView的屬性進(jìn)行修改時(shí)候所產(chǎn)生的動(dòng)畫,日常用到的一些動(dòng)畫都可以用UIView動(dòng)畫實(shí)現(xiàn)。我們知道每一個(gè)View至少包含一個(gè)layer,Core Animation則是讓我們可以直接對(duì)UIView的layer層進(jìn)行操作。通過控制layer動(dòng)畫,能夠?qū)崿F(xiàn)更加復(fù)雜的動(dòng)畫效果。
下圖說明了Core Animation類的關(guān)系,也是我們寫代碼經(jīng)常使用的類

1.CAAnimation:是CA類的基類。
除了自帶的init方法。比較重要的就是timingFunction和delegate這兩個(gè)屬性。
timingFunction提供了時(shí)間的變化函數(shù),一般用來控制動(dòng)畫的執(zhí)行速度,系統(tǒng)提供了4種方式:
1.1 kCAMediaTimingFunctionLinear(線性):勻速,給你一個(gè)相對(duì)靜態(tài)的感覺
1.2 kCAMediaTimingFunctionEaseIn(漸進(jìn)):動(dòng)畫緩慢進(jìn)入,然后加速離開
1.3 kCAMediaTimingFunctionEaseOut(漸出):動(dòng)畫全速進(jìn)入,然后減速的到達(dá)目的地
1.4 kCAMediaTimingFunctionEaseInEaseOut(漸進(jìn)漸出):動(dòng)畫緩慢的進(jìn)入,中間加速,然后減速的到達(dá)目的地。這個(gè)是默認(rèn)的動(dòng)畫行為。
delegate提供了兩個(gè)方法,用來通知你動(dòng)畫開始和結(jié)束。我們對(duì)動(dòng)畫執(zhí)行完畢后的操作一般會(huì)用到。
2.CAMediaTiming:一個(gè)協(xié)議,CAAnimation內(nèi)部實(shí)現(xiàn)了這個(gè)協(xié)議,用來設(shè)置動(dòng)畫的一些屬性
2.1 duration:動(dòng)畫執(zhí)行時(shí)間
2.2 repeatCount:重復(fù)次數(shù),
2.3 autoreverses:是否執(zhí)行反轉(zhuǎn)動(dòng)畫,設(shè)置true動(dòng)畫會(huì)從終點(diǎn)到原點(diǎn)反轉(zhuǎn)執(zhí)行一遍
2.4 fillMode:可以用來設(shè)置動(dòng)畫執(zhí)行完畢后,是否變回初始狀態(tài)
3.CAPropertyAnimation:也是一個(gè)抽象類,一般使用keyPath這個(gè)屬性來設(shè)置動(dòng)畫的類型,如旋轉(zhuǎn)、縮放等
4.CABasicAnimation:CAPropertyAnimation的子類
基礎(chǔ)動(dòng)畫主要包括:
4.1 位移:position
4.2 透明度:opacity
4.3 縮放:transform.scale
4.4 旋轉(zhuǎn):transform.rotation.z(這里是繞Z軸旋轉(zhuǎn))
4.5 背景色:backgroundColor
復(fù)雜的組合動(dòng)畫就是由這幾個(gè)基礎(chǔ)動(dòng)畫組合而來,要完成實(shí)際工作中的需求,我們就需要能把復(fù)雜動(dòng)畫拆開來,分步實(shí)現(xiàn)。
5.CAKeyframeAnimation:幀動(dòng)畫
也是CAPropertyAnimation的子類,相比于CABasicAnimation只能實(shí)現(xiàn)簡單formValue、toValue,幀動(dòng)畫允許我們給動(dòng)畫添加一個(gè)Values組,Values中存放著關(guān)鍵幀,keyTimes則存放關(guān)鍵幀的時(shí)間點(diǎn),一一對(duì)應(yīng)。keyTimes的范圍是【0,1】。CABasicAnimation也可以看作一個(gè)只有0和1的關(guān)鍵幀動(dòng)畫,只包含了開始和結(jié)束兩個(gè)關(guān)鍵幀。
6.CAAnimationGroup:動(dòng)畫組
動(dòng)畫組中添加基礎(chǔ)動(dòng)畫,每個(gè)基礎(chǔ)動(dòng)畫可以分別設(shè)置自己的執(zhí)行時(shí)間,動(dòng)畫組也可以設(shè)置自己的執(zhí)行時(shí)間,當(dāng)動(dòng)畫組的時(shí)間到了以后,子動(dòng)畫會(huì)直接結(jié)束。
7.CATransition:用于做過渡動(dòng)畫或者轉(zhuǎn)場動(dòng)畫能夠?yàn)閷犹峁┮瞥銎聊缓鸵迫肫聊坏膭?dòng)畫效果
系統(tǒng)API提供了四種動(dòng)畫效果:
7.1 kCATransitionFade :漸變效果
7.2 kCATransitionMoveIn?:進(jìn)入覆蓋效果
7.3 kCATransitionPush?:推出效果
7.4 kCATransitionReveal?:離開效果
使用CATransitionSubtype用來設(shè)置過渡動(dòng)畫的方向。
除開上面的部分,我們還可以使用CASpringAnimation來實(shí)現(xiàn)彈性動(dòng)畫,設(shè)置path屬性,結(jié)合貝塞爾曲線和CADisplayLink刷新幀來實(shí)現(xiàn)如水波紋這樣的路徑動(dòng)畫。
核心動(dòng)畫的基本概念部分就介紹到這里。后面會(huì)有一些動(dòng)畫的實(shí)現(xiàn)。