先來一張網(wǎng)絡(luò)上的結(jié)構(gòu)圖,清楚包含哪些東西倒庵,以免遺漏
一 CAAnimation
1.屬性及方法介紹
+ (instancetype)animation; //創(chuàng)建一個動畫的類方法,所有子類均可用此方法
+ (nullable id)defaultValueForKey:(NSString *)key; //代學(xué)習(xí)
- (BOOL)shouldArchiveValueForKey:(NSString *)key; //代學(xué)習(xí)
@property(nullable, strong) CAMediaTimingFunction *timingFunction; //控制動畫速度
/*
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é)議可以在動畫開始和結(jié)束時搞一些事情炫刷。擎宝。。
@property(getter=isRemovedOnCompletion) BOOL removedOnCompletion; //在動畫結(jié)束時浑玛,(默認(rèn)YES绍申,為了防止內(nèi)存泄露)
二 CAPropertyAnimation
1.屬性及方法介紹
+ (instancetype)animationWithKeyPath:(nullable NSString *)path; //創(chuàng)建的類方法,path一個關(guān)鍵路徑顾彰,而不僅僅是一個屬性极阅,甚至是一些虛擬的屬性
@property(nullable, copy) NSString *keyPath; //當(dāng)使用父類的類構(gòu)造方法是,設(shè)置動畫屬性
@property(getter=isAdditive) BOOL additive; //從呈現(xiàn)層當(dāng)前位置繼續(xù)動畫
@property(getter=isCumulative) BOOL cumulative; //當(dāng)重復(fù)動畫時設(shè)置
@property(nullable, strong) CAValueFunction *valueFunction; //動畫值涨享,很少用到手動設(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; //一組值筋搏,用于動畫幀
@property(nullable) CGPathRef path; //可以按照特定路徑,不必給出每一幀數(shù)據(jù)
@property(nullable, copy) NSArray<NSNumber *> *keyTimes; //當(dāng)給出幀時控制每一幀的時間點
@property(nullable, copy) NSArray<CAMediaTimingFunction *> *timingFunctions; 對應(yīng)每一幀動畫的速度模式厕隧,同上
@property(copy) NSString *calculationMode;
kCAAnimationLinear calculationMode的默認(rèn)值,表示當(dāng)關(guān)鍵幀為座標(biāo)點的時候,關(guān)鍵幀之間直接直線相連進(jìn)行插值計算;
kCAAnimationDiscrete 離散的,就是不進(jìn)行插值計算,所有關(guān)鍵幀直接逐個進(jìn)行顯示;
kCAAnimationPaced 使得動畫均勻進(jìn)行,而不是按keyTimes設(shè)置的或者按關(guān)鍵幀平分時間,此時keyTimes和timingFunctions無效;
kCAAnimationCubic** 對關(guān)鍵幀為座標(biāo)點的關(guān)鍵幀進(jìn)行圓滑曲線相連后插值計算,對于曲線的形狀還可以通過tensionValues,continuityValues,biasValues來進(jìn)行調(diào)整自定義,這里的數(shù)學(xué)原理是[Kochanek–Bartels spline](http://en.wikipedia.org/wiki/Kochanek-Bartels_spline),這里的主要目的是使得運(yùn)行的軌跡變得圓滑;
kCAAnimationCubicPaced 看這個名字就知道和kCAAnimationCubic有一定聯(lián)系,其實就是在kCAAnimationCubic的基礎(chǔ)上使得動畫運(yùn)行變得均勻,就是系統(tǒng)時間內(nèi)運(yùn)動的距離相同,此時keyTimes以及timingFunctions也是無效的.
@property(nullable, copy) NSString *rotationMode;
kCAAnimationRotateAuto //動畫模型跟隨路徑切線方向
kCAAnimationRotateAutoReverse //好像是會自動回放(待測)
五 CASpringAnimation
1.屬性及方法介紹
@property CGFloat mass; //質(zhì)量奔脐,影響圖層運(yùn)動時的彈簧慣性,質(zhì)量越大吁讨,彈簧拉伸和壓縮的幅度越大
@property CGFloat stiffness; //剛度系數(shù)(勁度系數(shù)/彈性系數(shù))髓迎,剛度系數(shù)越大,形變產(chǎn)生的力就越大挡爵,運(yùn)動越快
@property CGFloat damping; //阻尼系數(shù)竖般,阻止彈簧伸縮的系數(shù),阻尼系數(shù)越大茶鹃,停止越快
@property CGFloat initialVelocity; //初始速率涣雕,動畫視圖的初始速度大小
速率為正數(shù)時艰亮,速度方向與運(yùn)動方向一致,速率為負(fù)數(shù)時挣郭,速度方向與運(yùn)動方向相反
@property(readonly) CFTimeInterval settlingDuration; //結(jié)算時間 返回彈簧動畫到停止時的估算時間迄埃,根據(jù)當(dāng)前的動畫參數(shù)估算
通常彈簧動畫的時間使用結(jié)算時間比較準(zhǔn)確
六 CATransition(轉(zhuǎn)場動畫)
1.屬性及方法介紹
@property(copy) NSString *type;
kCATransitionFade 交叉淡化過渡
kCATransitionMoveIn 新視圖移到舊視圖上面
kCATransitionPush 新視圖把舊視圖推出去
kCATransitionReveal 將舊視圖移開,顯示下面的新視圖
pageCurl 向上翻一頁
pageUnCurl 向下翻一頁
rippleEffect 滴水效果
suckEffect 收縮效果,如一塊布被抽走
cube 立方體效果
oglFlip 上下翻轉(zhuǎn)效果
@property(nullable, copy) NSString *subtype; //動畫的方向
kCATransitionFromRight
kCATransitionFromLeft
kCATransitionFromTop
kCATransitionFromBottom