封裝類中的方法:html
1 #import <Foundation/Foundation.h> 2 3 #import <UIKit/UIKit.h> 4 5 6 7 8 9 @interface AnimationEffect : NSObject 10 11 12 13 14 15 /** 16 17 * push/pop轉場動畫封裝 18 19 * 20 21 * @param type 動畫類型 22 23 * @param subType 動畫子類型 24 25 * @param duration 動畫時間 26 27 * @param timingFunction 動畫定時函數屬性 28 29 * @param theView self.view 當前控制器視圖 30 31 * 32 33 * @return 返回一個動畫 34 35 */ 36 37 38 39 + (CATransition *)showAnimationType:(NSString *)type 40 41 withSubType:(NSString *)subType 42 43 duration:(CFTimeInterval)duration 44 45 timingFunction:(NSString *)timingFunction 46 47 view:(UIView *)theView; 48 49 50 51 52 53 54 55 @end
封裝方法的實現及參數說明:ios
1 #import "AnimationEffect.h" 2 3 @implementation AnimationEffect 4 5 6 + (CATransition *)showAnimationType:(NSString *)type 7 withSubType:(NSString *)subType 8 duration:(CFTimeInterval)duration 9 timingFunction:(NSString *)timingFunction 10 view:(UIView *)theView 11 { 12 13 CATransition *animation = [CATransition animation]; 14 /** delegate 15 * 16 * 動畫的代理,若是你想在動畫開始和結束的時候作一些事,能夠設置此屬性,它會自動回調兩個代理方法. 17 * 18 * @see CAAnimationDelegate (按下command鍵點擊) 19 */ 20 animation.delegate = self; 21 /** duration 22 * 23 * 動畫持續時間 24 */ 25 animation.duration = duration; 26 /** timingFunction 27 * 28 * 用於變化起點和終點之間的插值計算,形象點說它決定了動畫運行的節奏,好比是均勻變化(相同時間變化量相同)仍是 29 * 先快後慢,先慢後快仍是先慢再快再慢. 30 * 31 * 動畫的開始與結束的快慢,有五個預置分別爲(下同): 32 * kCAMediaTimingFunctionLinear 線性,即勻速 33 * kCAMediaTimingFunctionEaseIn 先慢後快 34 * kCAMediaTimingFunctionEaseOut 先快後慢 35 * kCAMediaTimingFunctionEaseInEaseOut 先慢後快再慢 36 * kCAMediaTimingFunctionDefault 實際效果是動畫中間比較快. 37 */ 38 39 /** timingFunction 40 * 41 * 當上面的預置不能知足你的需求的時候,你能夠使用下面的兩個方法來自定義你的timingFunction 42 * 具體參見下面的URL 43 * 44 * @see http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/CAMediaTimingFunction_class/Introduction/Introduction.html 45 * 46 * + (id)functionWithControlPoints:(float)c1x :(float)c1y :(float)c2x :(float)c2y; 47 * 48 * - (id)initWithControlPoints:(float)c1x :(float)c1y :(float)c2x :(float)c2y; 49 */ 50 animation.timingFunction = [CAMediaTimingFunction functionWithName:timingFunction]; 51 /** fillMode 此設置也能夠做爲參數傳進來 52 * 53 * 決定當前對象過了非active時間段的行爲,好比動畫開始以前,動畫結束以後. 54 * 預置爲: 55 * kCAFillModeRemoved 默認,當動畫開始前和動畫結束後,動畫對layer都沒有影響,動畫結束後,layer會恢復到以前的狀態 56 * kCAFillModeForwards 當動畫結束後,layer會一直保持着動畫最後的狀態 57 * kCAFillModeBackwards 和kCAFillModeForwards相對,具體參考上面的URL 58 * kCAFillModeBoth kCAFillModeForwards和kCAFillModeBackwards在一塊兒的效果 59 */ 60 animation.fillMode = kCAFillModeForwards; 61 /** type 62 * 63 * 各類動畫效果 其中除了'fade', `moveIn', `push' , `reveal' ,其餘屬於似有的API(我是這麼認爲的,能夠點進去看下注釋). 64 * ↑↑↑上面四個能夠分別使用'kCATransitionFade', 'kCATransitionMoveIn', 'kCATransitionPush', 'kCATransitionReveal'來調用. 65 * @"cube" 立方體翻滾效果 66 * @"moveIn" 新視圖移到舊視圖上面 67 * @"reveal" 顯露效果(將舊視圖移開,顯示下面的新視圖) 68 * @"fade" 交叉淡化過渡(不支持過渡方向) (默認爲此效果) 69 * @"pageCurl" 向上翻一頁 70 * @"pageUnCurl" 向下翻一頁 71 * @"suckEffect" 收縮效果,相似系統最小化窗口時的神奇效果(不支持過渡方向) 72 * @"rippleEffect" 滴水效果,(不支持過渡方向) 73 * @"oglFlip" 上下左右翻轉效果 74 * @"rotate" 旋轉效果 75 * @"push" 76 * @"cameraIrisHollowOpen" 相機鏡頭打開效果(不支持過渡方向) 77 * @"cameraIrisHollowClose" 相機鏡頭關上效果(不支持過渡方向) 78 */ 79 80 /** type 81 * 82 * kCATransitionFade 交叉淡化過渡 83 * kCATransitionMoveIn 新視圖移到舊視圖上面 84 * kCATransitionPush 新視圖把舊視圖推出去 85 * kCATransitionReveal 將舊視圖移開,顯示下面的新視圖 86 */ 87 animation.type = type; 88 /** subtype 89 * 90 * 各類動畫方向 91 * 92 * kCATransitionFromRight; 同字面意思(下同) 93 * kCATransitionFromLeft; 94 * kCATransitionFromTop; 95 * kCATransitionFromBottom; 96 */ 97 98 /** subtype 99 * 100 * 當type爲@"rotate"(旋轉)的時候,它也有幾個對應的subtype,分別爲: 101 * 90cw 逆時針旋轉90° 102 * 90ccw 順時針旋轉90° 103 * 180cw 逆時針旋轉180° 104 * 180ccw 順時針旋轉180° 105 */ 106 animation.subtype = subType; 107 [theView.layer addAnimation:animation forKey:nil]; 108 return animation; 109 } 110 111 112 113 114 @end
使用過程push和View:git
1 #import "ViewController.h" 2 #import "AnimationEffect.h" 3 #import "TestViewController.h" 4 5 @interface ViewController () 6 7 @property (nonatomic, strong)UIView *views; 8 9 @end 10 11 @implementation ViewController 12 13 - (void)viewDidLoad { 14 [super viewDidLoad]; 15 16 17 UIButton *bu = [UIButton buttonWithType:UIButtonTypeCustom]; 18 bu.frame = CGRectMake(100, 100, 120, 100); 19 [bu setBackgroundColor:[UIColor redColor]]; 20 [self.view addSubview:bu]; 21 [bu addTarget:self action:@selector(push) forControlEvents:UIControlEventTouchUpInside]; 22 23 24 self.views = [[UIView alloc]initWithFrame:CGRectMake(100, 230, 120, 200)]; 25 self.views.backgroundColor = [UIColor orangeColor]; 26 [self.view addSubview:self.views]; 27 28 } 29 - (void)push{ 30 //push的使用 31 32 33 // [self.navigationController.view.layer addAnimation:[AnimationEffect showAnimationType:@"cube" 34 // withSubType:kCATransitionFromRight 35 // duration:0.5f 36 // timingFunction:kCAMediaTimingFunctionEaseInEaseOut 37 // view:self.view] 38 // forKey:@"push"]; 39 // TestViewController *tVC = [[TestViewController alloc]init]; 40 // [self.navigationController pushViewController:tVC animated:YES]; 41 42 43 // view的使用 44 [self.views.layer addAnimation:[AnimationEffect showAnimationType:@"cube" 45 withSubType:kCATransitionFromRight 46 duration:0.5f 47 timingFunction:kCAMediaTimingFunctionEaseInEaseOut 48 view:self.views] 49 forKey:@"animation"]; 50 }
pop的使用過程:github
1 #import "TestViewController.h" 2 #import "AnimationEffect.h" 3 4 @implementation TestViewController 5 6 7 - (void)viewDidLoad { 8 [super viewDidLoad]; 9 10 self.view.backgroundColor = [UIColor whiteColor]; 11 UIButton *bu = [UIButton buttonWithType:UIButtonTypeCustom]; 12 bu.frame = CGRectMake(100, 100, 120, 100); 13 [bu setBackgroundColor:[UIColor purpleColor]]; 14 [self.view addSubview:bu]; 15 [bu addTarget:self action:@selector(pop) forControlEvents:UIControlEventTouchUpInside]; 16 } 17 18 - (void)pop{ 19 20 // pop的使用 21 [self.navigationController.view.layer addAnimation:[AnimationEffect showAnimationType:@"cube" 22 withSubType:kCATransitionFromLeft 23 duration:0.5f 24 timingFunction:kCAMediaTimingFunctionEaseInEaseOut 25 view:self.view] 26 forKey:@"push"]; 27 28 [self.navigationController popViewControllerAnimated:YES]; 29 } 30 31 @end
後續將完善modal動畫的封裝。app
本文GitHub地址https://github.com/zhangkiwi/iOS_SN_Animationide