iOS-動(dòng)畫(CAAnimation)整理學(xué)習(xí)

先來一張網(wǎng)絡(luò)上的結(jié)構(gòu)圖,清楚包含哪些東西,以免遺漏

結(jié)構(gòu)圖.png

一 CAAnimation

1.屬性及方法介紹

+ (instancetype)animation;  //創(chuàng)建一個(gè)動(dòng)畫的類方法,所有子類均可用此方法
+ (nullable id)defaultValueForKey:(NSString *)key;  //代學(xué)習(xí)
- (BOOL)shouldArchiveValueForKey:(NSString *)key; //代學(xué)習(xí)
@property(nullable, strong) CAMediaTimingFunction *timingFunction;  //控制動(dòng)畫速度
/*
  NSString * const kCAMediaTimingFunctionLinear    //勻速
 NSString * const kCAMediaTimingFunctionEaseIn    //先加速突然停止
 NSString * const kCAMediaTimingFunctionEaseOut   //先快速然后減速
 NSString * const kCAMediaTimingFunctionEaseInEaseOut  //加速在減速
 NSString * const kCAMediaTimingFunctionDefault    //默認(rèn)  跟out很像
*/
@property(nullable, strong) id <CAAnimationDelegate> delegate;  //遵循協(xié)議可以在動(dòng)畫開始和結(jié)束時(shí)搞一些事情。。。
@property(getter=isRemovedOnCompletion) BOOL removedOnCompletion;  //在動(dòng)畫結(jié)束時(shí),(默認(rèn)YES,為了防止內(nèi)存泄露)

二 CAPropertyAnimation

1.屬性及方法介紹

+ (instancetype)animationWithKeyPath:(nullable NSString *)path;   //創(chuàng)建的類方法,path一個(gè)關(guān)鍵路徑,而不僅僅是一個(gè)屬性,甚至是一些虛擬的屬性
@property(nullable, copy) NSString *keyPath;   //當(dāng)使用父類的類構(gòu)造方法是,設(shè)置動(dòng)畫屬性
@property(getter=isAdditive) BOOL additive;    //從呈現(xiàn)層當(dāng)前位置繼續(xù)動(dòng)畫
@property(getter=isCumulative) BOOL cumulative;  //當(dāng)重復(fù)動(dòng)畫時(shí)設(shè)置
@property(nullable, strong) CAValueFunction *valueFunction;   //動(dòng)畫值,很少用到手動(dòng)設(shè)置

三 CABasicAnimation

1.屬性及方法介紹

@property(nullable, strong) id fromValue;   //從什么值開始
@property(nullable, strong) id toValue;       //到什么值開始
@property(nullable, strong) id byValue;      //從當(dāng)前位置加上值

四 CAKeyframeAnimation

1.屬性及方法介紹

@property(nullable, copy) NSArray *values;   //一組值,用于動(dòng)畫幀
@property(nullable) CGPathRef path;    //可以按照特定路徑,不必給出每一幀數(shù)據(jù)
@property(nullable, copy) NSArray<NSNumber *> *keyTimes;  //當(dāng)給出幀時(shí)控制每一幀的時(shí)間點(diǎn)
@property(nullable, copy) NSArray<CAMediaTimingFunction *> *timingFunctions;  對(duì)應(yīng)每一幀動(dòng)畫的速度模式,同上
@property(copy) NSString *calculationMode;  
kCAAnimationLinear calculationMode的默認(rèn)值,表示當(dāng)關(guān)鍵幀為座標(biāo)點(diǎn)的時(shí)候,關(guān)鍵幀之間直接直線相連進(jìn)行插值計(jì)算;
kCAAnimationDiscrete 離散的,就是不進(jìn)行插值計(jì)算,所有關(guān)鍵幀直接逐個(gè)進(jìn)行顯示; 
kCAAnimationPaced 使得動(dòng)畫均勻進(jìn)行,而不是按keyTimes設(shè)置的或者按關(guān)鍵幀平分時(shí)間,此時(shí)keyTimes和timingFunctions無效;
kCAAnimationCubic** 對(duì)關(guān)鍵幀為座標(biāo)點(diǎn)的關(guān)鍵幀進(jìn)行圓滑曲線相連后插值計(jì)算,對(duì)于曲線的形狀還可以通過tensionValues,continuityValues,biasValues來進(jìn)行調(diào)整自定義,這里的數(shù)學(xué)原理是[Kochanek–Bartels spline](http://en.wikipedia.org/wiki/Kochanek-Bartels_spline),這里的主要目的是使得運(yùn)行的軌跡變得圓滑;
kCAAnimationCubicPaced 看這個(gè)名字就知道和kCAAnimationCubic有一定聯(lián)系,其實(shí)就是在kCAAnimationCubic的基礎(chǔ)上使得動(dòng)畫運(yùn)行變得均勻,就是系統(tǒng)時(shí)間內(nèi)運(yùn)動(dòng)的距離相同,此時(shí)keyTimes以及timingFunctions也是無效的.

@property(nullable, copy) NSString *rotationMode;
kCAAnimationRotateAuto  //動(dòng)畫模型跟隨路徑切線方向
kCAAnimationRotateAutoReverse  //好像是會(huì)自動(dòng)回放(待測(cè))

五 CASpringAnimation

1.屬性及方法介紹

@property CGFloat mass;  //質(zhì)量,影響圖層運(yùn)動(dòng)時(shí)的彈簧慣性,質(zhì)量越大,彈簧拉伸和壓縮的幅度越大
@property CGFloat stiffness;  //剛度系數(shù)(勁度系數(shù)/彈性系數(shù)),剛度系數(shù)越大,形變產(chǎn)生的力就越大,運(yùn)動(dòng)越快
@property CGFloat damping;  //阻尼系數(shù),阻止彈簧伸縮的系數(shù),阻尼系數(shù)越大,停止越快
@property CGFloat initialVelocity;  //初始速率,動(dòng)畫視圖的初始速度大小
速率為正數(shù)時(shí),速度方向與運(yùn)動(dòng)方向一致,速率為負(fù)數(shù)時(shí),速度方向與運(yùn)動(dòng)方向相反
@property(readonly) CFTimeInterval settlingDuration;  //結(jié)算時(shí)間 返回彈簧動(dòng)畫到停止時(shí)的估算時(shí)間,根據(jù)當(dāng)前的動(dòng)畫參數(shù)估算
通常彈簧動(dòng)畫的時(shí)間使用結(jié)算時(shí)間比較準(zhǔn)確

六 CATransition(轉(zhuǎn)場(chǎng)動(dòng)畫)

1.屬性及方法介紹

@property(copy) NSString *type;  
kCATransitionFade 交叉淡化過渡
kCATransitionMoveIn 新視圖移到舊視圖上面
kCATransitionPush 新視圖把舊視圖推出去
kCATransitionReveal 將舊視圖移開,顯示下面的新視圖
pageCurl 向上翻一頁
pageUnCurl 向下翻一頁
rippleEffect 滴水效果
suckEffect 收縮效果,如一塊布被抽走
cube 立方體效果
oglFlip 上下翻轉(zhuǎn)效果
@property(nullable, copy) NSString *subtype;   //動(dòng)畫的方向
kCATransitionFromRight
kCATransitionFromLeft
kCATransitionFromTop
kCATransitionFromBottom

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

相關(guān)閱讀更多精彩內(nèi)容

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