iOS動(dòng)畫篇_CoreAnimation(超詳細(xì)解析核心動(dòng)畫)
老司機(jī)帶你走進(jìn)Core Animation
iOS動(dòng)畫(Core Animation)總結(jié)
CAAnimation是什么呢?
CAAniamtion是一個(gè)抽象類,遵循著CAMediaTiming和CAAciotn兩個(gè)協(xié)議。通過他的4個(gè)子類,我們可以實(shí)現(xiàn)很多絢麗的動(dòng)畫效果。
CAAnimation下有幾個(gè)屬性
timingFunction,這個(gè)呢,指定的是動(dòng)畫的節(jié)奏。所謂節(jié)奏是什么什么意思呢?就是動(dòng)畫執(zhí)行的快慢交替。有如下幾個(gè)可選項(xiàng)
kCAMediaTimingFunctionLinear//線性節(jié)奏,就是勻速
kCAMediaTimingFunctionEaseIn//淡入,緩慢加速進(jìn)入,然后勻速
kCAMediaTimingFunctionEaseOut//淡出,勻速,然后緩慢減速移除
kCAMediaTimingFunctionEaseInEaseOut//淡入淡出,結(jié)合以上兩者
kCAMediaTimingFunctionDefault//默認(rèn)效果
delegate,代理。設(shè)置代理以后就會(huì)執(zhí)行代理方法啦。
-(void)animationDidStart:(CAAnimation *)anim;
-(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;
一個(gè)是動(dòng)畫開始的代理,一個(gè)是動(dòng)畫結(jié)束的代理。
值得注意的是,結(jié)束代理中,有一個(gè)flag。他的意思是如果動(dòng)畫正常播放完成的話,flag為YES。如果沒有播放完成或者被移除則返回NO。
removedOnCompletion,是否在播放完成后移除。這是一個(gè)非常重要的屬性,有的時(shí)候我們希望動(dòng)畫播放完成,但是保留最終的播放效果是,這個(gè)屬性一定要改為NO,否則無效。
遵循著 CAMediaTiming 協(xié)議,所以他自然也有 duration、beginTime等一些屬性。
beginTime,動(dòng)畫的開始時(shí)間,準(zhǔn)確的說應(yīng)該叫滯后時(shí)間。就是當(dāng)你將動(dòng)畫加載layer中后滯后多長(zhǎng)時(shí)間開始播放。
/* The begin time of the object, in relation to its parent object, if
這個(gè)屬性很重要,我想要著重講一下。上面是beginTime屬性的注釋。從中我們能夠看出,這個(gè)beginTime是與父對(duì)象有關(guān)的。
由于CALayer和CAAnimation都遵循CAMediaTiming協(xié)議,所以那他都可以作為我們animation對(duì)象的父對(duì)象
duration,是動(dòng)畫的持續(xù)時(shí)間。簡(jiǎn)單的概念我就一筆帶過了吧,同樣的還有repeatCount,autoreverses (自動(dòng)逆轉(zhuǎn))。這些都是一些基本屬性,基本看單詞就知道用途了。
speed,這個(gè)我也要說一下,他表示的是當(dāng)前對(duì)象的時(shí)間流速。簡(jiǎn)單來說,如果speed是2,duration是3,那么經(jīng)過1.5秒,我的動(dòng)畫已經(jīng)播放完成了。s = v * t,s就相當(dāng)于已經(jīng)播放的動(dòng)畫,也就是長(zhǎng)度為3個(gè)單位的動(dòng)畫,v相當(dāng)于每秒播放多少動(dòng)畫,即每秒播放兩個(gè)單位的動(dòng)畫,所以1.5秒后動(dòng)畫其實(shí)就播放完成了。