iOS_SN_push/pop轉場動畫封裝和通常動畫封裝

封裝類中的方法: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

相關文章
相關標籤/搜索