iOS中的核心動(dòng)畫Core Animation

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方法。比較重要的就是timingFunctiondelegate這兩個(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)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容