iOS_SN_push/pop转场动画封装和一般动画封装

封装类中的方法:

 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

封装方法的实现及参数说明:

  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:

 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的使用过程:

 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动画的封装。

时间: 2024-08-06 01:00:03

iOS_SN_push/pop转场动画封装和一般动画封装的相关文章

Android Activity切换动画多种实现方式与封装

关于Activity动画那些事 关于activity的动画,相信大家再熟悉不过了,我们开发中经常用到,网上资料也很多,但是也有一些小细节需要我们注意,今天这篇文章我总结了几种常用的动画实现方式,通过这篇文章,你可以了解到: 几种常见的activity动画实现方式 activity动画中需要注意的细节 这几种方式的优缺点比较,我们如何取舍 对这几种方式进行简易封装,提高我们的开发效率 几种常见的实现方式: 1. activity.overridePendingTransition() 这种方式相信

JS---案例:手风琴 (利用封装好的动画函数)

案例:手风琴 封装好的动画函数在common.js里面 //function getStyle(element, attr) {...} //function animate(element, json, fn) {...} 手风琴设置的是背景图吗,backgroudImage="url(image/***.jpg)"; 当鼠标进入的时候,当前的宽度变为800,其余的遍历并设置为100: 鼠标离开的时候,所有li宽度变为400 <!DOCTYPE html> <htm

iOS动画详解(学习动画看这一篇就够了)

iOS动画详解(学习动画看这一篇就够了) 一.基础知识 CAAnimation.png 二.CABasicAnimation 1. 动画的属性和解释 2.属性值的解释 repeatCount : 如果在swift中需要一直不断重复:Float.infinity,OC:HUGE_VALF timingFunction: timingFunction.png kCAMediaTimingFunctionLinear--在整个动画时间内动画都是以一个相同的速度来改变.也就是匀速运动.一个线性的计时函数

IOS 动画专题 --iOS核心动画

iOS开发系列--让你的应用“动”起来 --iOS核心动画 概览 通过核心动画创建基础动画.关键帧动画.动画组.转场动画,如何通过UIView的装饰方法对这些动画操作进行简化等.在今天的文章里您可以看到动画操作在iOS中是如何简单和高效,很多原来想做但是苦于没有思路的动画在iOS中将变得越发简单: CALayer CALayer简介 CALayer常用属性 CALayer绘图 Core Animation 基础动画 关键帧动画 动画组 转场动画 逐帧动画 UIView动画封装目 录 基础动画 关

动画(Animation) 、 高级动画(Core Animation)

1 演示UIImage制作的动画 1.1 问题 UIImage动画是IOS提供的最基本的动画,通常用于制作一些小型的动画,本案例使用UIImage制作一个小狗跑动的动画,如图-1所示: 图-1 1.2 方案 首先在创建好的Xcode项目的Storyboard中拖放一个ImageView控件,并关联成TRViewController的属性imageView. 然后在viewDidLoad方法中使用工厂方法animatedImageNamed:创建UIImage对象image. 最后将imageVi

CoreAnimation4-隐式动画和显式动画

事务 Core Animation基于一个假设,说屏幕上的任何东西都可以(或者可能)做动画.动画并不需要你在Core Animation中手动打开,相反需要明确地关闭,否则他会一直存在. 当你改变CALayer的一个可做动画的属性,它并不能立刻在屏幕上体现出来.相反,它是从先前的值平滑过渡到新的值.这一切都是默认的行为,你不需要做额外的操作. 这看起来这太棒了,似乎不太真实,我们来用一个demo解释一下:首先和第一章“图层树”一样创建一个蓝色的方块,然后添加一个按钮,随机改变它的颜色.代码见清单

ios开发核心动画七:核心动画与UIView动画的区别

/** UIView与核心动画区别?(掌握) 1.核心动画只作用在layer. 2.核心动画看到的都是假像,它并没有去修改UIView的真实位置. 什么时候使用核心动画? 1.当不需要与用户进行交互,使用核心动画 2.当要根据路径做动画时,使用核心动画:CABasicAnimation,CAKeyFrameAnimation,两个都可以根据绘制的路径UIBizerPath来绘制路径来执行动画 3.当做转场动画时, 使用核心动画 (核心动画转场类型比较多)CATrasition或是UIView的核

iOS核心动画高级技巧之核心动画(三)

iOS核心动画高级技巧之CALayer(一) iOS核心动画高级技巧之图层变换和专用图层(二)iOS核心动画高级技巧之核心动画(三)iOS核心动画高级技巧之性能(四)iOS核心动画高级技巧之动画总结(五) 隐式动画 隐式动画主要作用于CALayer的可动画属性上面,UIView对应的layer是不可以的,只要你改变属性的值,它不是突兀的直接改变过去,而是一个有一个动画的过程,这个时间等属性你可以通过事务(CATransaction)来控制,如果你不自己提供一个事务,它的默认时间是0.25秒,当然

iOS Core Animation Advanced Techniques(四):隐式动画和显式动画

隐式动画 按照我的意思去做,而不是我说的. -- 埃德娜,辛普森 我们在第一部分讨论了Core Animation除了动画之外可以做到的任何事情.但是动画师Core Animation库一个非常显著的特性.这一章我们来看看它是怎么做到的.具体来说,我们先来讨论框架自动完成的隐式动画(除非你明确禁用了这个功能). 事务 Core Animation基于一个假设,说屏幕上的任何东西都可以(或者可能)做动画.动画并不需要你在Core Animation中手动打开,相反需要明确地关闭,否则他会一直存在.