ios高階動畫的簡單實現
詳細移步到我的GitHub下載demo。
EasyAnimation
用一行程式碼寫出你想要的動畫效果
本封裝庫抽取了設定動畫時常用的屬性引數,可以用一句程式碼快速設定一個或者一組動畫效果。如果想要進行更多設定,可以在block裡面新增對應的屬性,例如重複次數等。
#import "UIView+Animation.h"
將你要使用動畫的view執行對應的方法即可。(所有的方法預設執行動畫後不返回,如果要返回則在block中設定即可)
//平移到某一點,其中tx和ty表示view的中心點將要移動到的位置
-(void)setPositionAnimationWithtX:(CGFloat)tX andtY:(CGFloat)tY duration:(double)duration additions:(void(^)(CABasicAnimation *animate))block;
//縮放,長寬放大縮小n倍
-(void)setTransformMakeScaleAnimationWithWidthRatio:(CGFloat)W heightRatio:(CGFloat)H duration:(double)duration additions:(void(^)(CABasicAnimation *animate))block;
//繞軸旋轉某個角度,選擇繞某一軸將其置為1,其餘為0,並設定旋轉角度(0~2M_PI)
-(void)setTransform3DMakeRotationAnimationWithAngle:(CGFloat)angle isX:(CGFloat)X isY:(CGFloat)Y isZ:(CGFloat)Z duration:(double)duration additions:(void(^)(CABasicAnimation *animate))block;
//透明度變化,設定值為0.0~1.0
-(void)setOpacityAnimationWithOpacity:(float)opacity duration:(double)duration additions:(void(^)(CABasicAnimation *animate))block;
//設定關鍵幀動畫,需要定義一個CGPoint的陣列來規劃你要走的路線,keytiems可以設定每段位移的位移時間間隔長短比例。 /*calculationMode引數說明
kCAAnimationLinear calculationMode的預設值,表示當關鍵幀為座標點的時候,關鍵幀之間直接直線相連進行插值計算;
kCAAnimationDiscrete 離散的,就是不進行插值計算,所有關鍵幀直接逐個進行顯示;
kCAAnimationPaced 使得動畫均勻進行,而不是按keyTimes設定的或者按關鍵幀平分時間,此時keyTimes和timingFunctions無效;
kCAAnimationCubic 對關鍵幀為座標點的關鍵幀進行圓滑曲線相連後插值計算,對於曲線的形狀還可以通過tensionValues,continuityValues,biasValues來進行調整自定義,這裡的數學原理是Kochanek–Bartels spline,這裡的主要目的是使得執行的軌跡變得圓滑;
kCAAnimationCubicPaced 看這個名字就知道和kCAAnimationCubic有一定聯絡,其實就是在kCAAnimationCubic的基礎上使得動畫執行變得均勻,就是系統時間內運動的距離相同,此時keyTimes以及timingFunctions也是無效的. */
-(void)setKeyAnimationWithKeyPath:(NSArray*)keyPaths keyTimes:(NSArray )keyTimes duration:(double)duration calculationMode:(NSString)calculationMode additions:(void(^)(CAKeyframeAnimation *keyAnimate))block;
//設定動畫組,需要傳入你要組合的動畫並設定其屬性,詳細見一下獲取動畫例項的方法。
-(void)setSerialAnimateWithAnimateGroup:(NSArray<CAAnimation*> *)aniArr duration:(double)duration additions:(void(^)(CAAnimationGroup *animaGroup))block;
//設定重複動畫,需要傳入你要組合的動畫並設定其屬性,設定每次重複出現的時間間隔和重複次數。
-(void)setRepeatAnimationWithAnimations:(NSArray<CAAnimation*>*)animations instanceCount:(int)instanceCount instanceDelay:(float)instanceDelay repeatCount:(int)repeatCount;
/////獲取動畫例項的方法 //位移
+(CABasicAnimation *)getPositionAnimationWithtX:(CGFloat)X tY:(CGFloat)Y duration:(double)duration addition:(void(^)(CABasicAnimation *animate))block;
//縮放
+(CABasicAnimation *)getScaleAnimationWithsX:(CGFloat)X sY:(CGFloat)Y duration:(double)duration addition:(void(^)(CABasicAnimation *animate))block;
//旋轉
+(CABasicAnimation *)get3DMakeRotationAnimationWithrX:(CGFloat)X rY:(CGFloat)Y rZ:(CGFloat)Z angle:(CGFloat)angle duration:(double)duration addition:(void(^)(CABasicAnimation *animate))block;
//透明度
+(CABasicAnimation *)getOpacityAnimationWithOpacity:(CGFloat)opacity duration:(double)duration addition:(void(^)(CABasicAnimation *animate))block;
//3D縮放
+(CABasicAnimation *)getCATransform3DScaleAnimationWithXRatio:(CGFloat)xRatio YRatio:(float)yRatio duration:(double)duration addition:(void(^)(CABasicAnimation *animate))block;
//關鍵幀動畫
+(CAKeyframeAnimation*)getCAKeyframeAnimationWithKeyPaths:(NSArray*)keyPaths keyTimes:(NSArray*)keyTimes calculationMode:(NSString*)calculationMode duration:(double)duration addition:(void(^)(CAKeyframeAnimation *keyAnimate))block;