ViewController之间的切换动画
一 、API介绍
iOS7开始,苹果推出了自定义转场动画API。从此,任何可以用Core Animation实现的动画,都可以出现在两个ViewController的切换之间
知识点图:

从上图可以看出,新的Api主要提供了2中VC切换方式,动画式切换,交互式切换。
二 、动画式切换,实现方法:
1,创建继承自NSObject并且声明 UIViewControllerAnimatedTransitioning的动画类;
#import <UIKit/UIKit.h>
@interface PagingTransition : NSObject<UIViewControllerAnimatedTransitioning> @end
2,重载 UIViewControllerAnimatedTransitioning 中的协议方法。
#import "PagingTransition.h" @implementation PagingTransition //返回动画的时间
- (NSTimeInterval)transitionDuration:(nullable id <UIViewControllerContextTransitioning>)transitionContext
{ return ; }
//在进行切换的时候将调用该方法,我们对于切换时的UIView的设置和动画都在这个方法中完成。
- (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext
{ UIViewController* toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
UIViewController* fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
[[transitionContext containerView] addSubview:toVC.view]; /**
* 效果1
*/ toVC.view.alpha = ; [UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{
fromVC.view.transform = CGAffineTransformMakeScale(0.1, 0.1);
toVC.view.alpha = ;
} completion:^(BOOL finished) {
fromVC.view.transform = CGAffineTransformIdentity;
[transitionContext completeTransition:![transitionContext transitionWasCancelled]]; }]; /**
* 另一种效果
*/
// CGRect finalRect = [transitionContext finalFrameForViewController:toVC];
//
// toVC.view.frame = CGRectOffset(finalRect, 0, [[UIScreen mainScreen]bounds].size.height);
//
// [UIView animateWithDuration:[self transitionDuration:transitionContext] delay:0.0 usingSpringWithDamping:0.8 initialSpringVelocity:0.0 options:UIViewAnimationOptionCurveLinear animations:^{
// toVC.view.frame = finalRect;
// } completion:^(BOOL finished) {
// //5
// [transitionContext completeTransition:YES];
// }];
//
} @end
3, 在ViewController中实现 UINavigationControllerDelegate 方法,并指定delegate。
self.navigationController.delegate = self;
#pragma mark-- UINavigationControllerDelegate
- (id<UIViewControllerAnimatedTransitioning>) navigationController:(UINavigationController *)navigationController
animationControllerForOperation:(UINavigationControllerOperation)operation fromViewController:(UIViewController*)fromVC
toViewController:(UIViewController*)toVC
{
if (operation == UINavigationControllerOperationPush) {
PagingTransition *ping = [PagingTransition new];
return ping;
}
return nil;
}
三、交互式切换 ,会根据交互式手势来切换VC并同时播放动画效果。
参考: http://www.cocoachina.com/industry/20140623/8918.html
例子:https://github.com/PeteC/InteractiveViewControllerTransitions
ViewController之间的切换动画的更多相关文章
- Android Activity之间经典切换动画
package com.iteye.androidtoast; import java.util.ArrayList; import java.util.List; import android.ap ...
- Android中的动画具体解释系列【4】——Activity之间切换动画
前面介绍了Android中的逐帧动画和补间动画,并实现了简单的自己定义动画.这一篇我们来看看怎样将Android中的动画运用到实际开发中的一个场景--Activity之间跳转动画. 一.定义动画资源 ...
- Android中的动画详解系列【4】——Activity之间切换动画
前面介绍了Android中的逐帧动画和补间动画,并实现了简单的自定义动画,这一篇我们来看看如何将Android中的动画运用到实际开发中的一个场景--Activity之间跳转动画. 一.定义动画资源 如 ...
- Android Listview切换动画,扩展到任意view切换之间动画实现
添加布局如下: <?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2010 ...
- Swift:超炫的View Controller切换动画
匿名社交应用Secret的开发者开发了一款叫做Ping的应用,用户可以他们感兴趣的话题的推送. Ping有一个很炫的东西,就是主界面和之间切换的动画做的非常的好.每次看到一个非常炫的动画,都不由得会想 ...
- Android Activity 切换动画(非原创)
在Android开发过程中,经常会碰到Activity之间的切换效果的问题,下面介绍一下如何实现左右滑动的切换效果,首先了解一下Activity切换的实现,从Android2.0开始在Activity ...
- Android的Activity屏幕切换动画-左右滑动切换
. --> 在Android开发过程中,经常会碰到Activity之间的切换效果的问题,下面介绍一下如何实现左右滑动的切换效果,首先了解一下Activity切换的实现,从Android2.0开始 ...
- Android的Activity屏幕切换动画(一)-左右滑动切换
(国内知名Android开发论坛eoe开发者社区推荐:http://www.eoeandroid.com/) Android的Activity屏幕切换动画(一)-左右滑动切换 在Android开发过程 ...
- IOS 视图切换动画
我在网上找到的这个小方法,被我举一反三使用的屡试不爽.比如用在,当视图需要执行某一方法跳转到新的一个UIView上,从底层渐变浮到最上层.就是一个不错的视觉效果或者当需要类似keyboard的效果从底 ...
随机推荐
- Android -- 自定义View小Demo,绘制钟表时间(一)
1,昨天刚看了hongyang大神推荐的自定义时钟效果(传动门:http://www.jianshu.com/users/a45d19d680af/),效果还是不错的,自己又在github上找了找,发 ...
- yii2购物车实现
1.商品列表中点击加入购物车,则跳转到购物车列表,效果如图所示: 视图代码goods/list.php中.代码如下: <?php echo Html::a('加入购物车',['cart','id ...
- onTouch和onTouchEvent
public boolean dispatchTouchEvent(MotionEvent event) { if (mOnTouchListener != null && mOnTo ...
- startActivityForResult 页面跳转回调
import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import java.util. ...
- python编码:gbk编码与解码
从RF输入的中文会进行unicode编码:u'\u6587\u4ef6\u5230\u8fbe\u6210\u529f' 从orc数据库查询到的中文会进行gbk编码得到ASCII:'\xce\xc4\ ...
- 检测内存泄露:Instruments中的Leaks
前言 如果要检测内存泄露,我们会使用Xcode7自带的Instruments中的Leaks工具来检测. 现在的开发环境是ARC,所以很少会出现内存泄漏的情况. 不过我们一定要养好码代码的规范性. 例如 ...
- 利用OpenStack Rest API 创建镜像
服务端点: image API: POST /v2/images Request1: Method:Post Url: http://192.168.31.147:9292/v ...
- Linux下命令行安装WebLogic 10.3.6
1.创建用户useradd weblogic;创建用户成功linux系统会自动创建一个和用户名相同的分组,并将该用户分到改组中.并会在/home路径下创建一个和用户名相同的路径,比如我们创建的webl ...
- HDU 3078:Network(LCA之tarjan)
http://acm.hdu.edu.cn/showproblem.php?pid=3078 题意:给出n个点n-1条边m个询问,每个点有个权值,询问中有k,u,v,当k = 0的情况是将u的权值修改 ...
- 通达OA 同步中控考勤机 增强版
如果你用的是中控考勤机且考勤机能联网,那恭喜有福了! 最近发现考勤机提供web方式查询,经过调试可以用程序直接读取考勤机数据跨过考勤机软件及其access数据库,数据同步及时性.可靠性大幅提高. 通达 ...