iOS動畫篇_CoreAnimation(超詳細(xì)解析核心動畫)
老司機(jī)帶你走進(jìn)Core Animation
CAAnimation是什么呢钢猛?
CAAniamtion是一個(gè)抽象類蒙畴,遵循著CAMediaTiming和CAAciotn兩個(gè)協(xié)議胁附。通過他的4個(gè)子類,我們可以實(shí)現(xiàn)很多絢麗的動畫效果导梆。
CAAnimation下有幾個(gè)屬性
timingFunction轨淌,這個(gè)呢迂烁,指定的是動畫的節(jié)奏。所謂節(jié)奏是什么什么意思呢递鹉?就是動畫執(zhí)行的快慢交替盟步。有如下幾個(gè)可選項(xiàng)
kCAMediaTimingFunctionLinear//線性節(jié)奏,就是勻速
kCAMediaTimingFunctionEaseIn//淡入躏结,緩慢加速進(jìn)入址芯,然后勻速
kCAMediaTimingFunctionEaseOut//淡出,勻速窜觉,然后緩慢減速移除
kCAMediaTimingFunctionEaseInEaseOut//淡入淡出,結(jié)合以上兩者
kCAMediaTimingFunctionDefault//默認(rèn)效果
delegate北专,代理禀挫。設(shè)置代理以后就會執(zhí)行代理方法啦。
-(void)animationDidStart:(CAAnimation *)anim;
-(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;
一個(gè)是動畫開始的代理拓颓,一個(gè)是動畫結(jié)束的代理语婴。
值得注意的是,結(jié)束代理中驶睦,有一個(gè)flag砰左。他的意思是如果動畫正常播放完成的話,flag為YES场航。如果沒有播放完成或者被移除則返回NO缠导。
removedOnCompletion,是否在播放完成后移除溉痢。這是一個(gè)非常重要的屬性僻造,有的時(shí)候我們希望動畫播放完成,但是保留最終的播放效果是孩饼,這個(gè)屬性一定要改為NO髓削,否則無效。
遵循著 CAMediaTiming 協(xié)議镀娶,所以他自然也有 duration立膛、beginTime等一些屬性。
beginTime
,動畫的開始時(shí)間梯码,準(zhǔn)確的說應(yīng)該叫滯后時(shí)間宝泵。就是當(dāng)你將動畫加載layer中后滯后多長時(shí)間開始播放。
/* The begin time of the object, in relation to its parent object, if
這個(gè)屬性很重要忍些,我想要著重講一下鲁猩。上面是beginTime屬性的注釋。從中我們能夠看出罢坝,這個(gè)beginTime是與父對象
有關(guān)的廓握。
由于CALayer和CAAnimation都遵循CAMediaTiming協(xié)議搅窿,所以那他都可以作為我們animation對象的父對象
duration,是動畫的持續(xù)時(shí)間隙券。簡單的概念我就一筆帶過了吧男应,同樣的還有repeatCount,autoreverses (自動逆轉(zhuǎn))娱仔。這些都是一些基本屬性沐飘,基本看單詞就知道用途了。
speed牲迫,這個(gè)我也要說一下耐朴,他表示的是當(dāng)前對象的時(shí)間流速。簡單來說盹憎,如果speed是2筛峭,duration是3,那么經(jīng)過1.5秒陪每,我的動畫已經(jīng)播放完成了影晓。s = v * t,s就相當(dāng)于已經(jīng)播放的動畫檩禾,也就是長度為3個(gè)單位的動畫挂签,v相當(dāng)于每秒播放多少動畫,即每秒播放兩個(gè)單位的動畫盼产,所以1.5秒后動畫其實(shí)就播放完成了饵婆。