先來一張網(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