1. 程式人生 > >ios高階動畫的簡單實現

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;

image