iOS自定义转场(custom transition)
2016-04-19 15:22
483 查看
iOS中,从一个也没切换到另一个页面的效果叫转场(transition)。UINavgationController、UIViewController默认的转场效果有时不能满足项目的要求,需要我们创造新的效果,这就需要用到自定义转场啦!
自定义的步骤:
1、准备两个UIViewController,通常是从presentdingViewController(简写presenting)跳转到 presentedViewController(简写presented);
2、presenteing中需要实现<UIViewControllerTransitioningDelegate>接口,然后重写该接口中的方法animationControllerForPresentedController、animationControllerForDismissedController。如果presentingVC中调用了[self presentViewController:
],则会执行接口中的方法,这个方法就会返回自定义转场的效果;
3、第二步中animationControllerForPresentedController方法应该返回转场动画的对象,它实现了<UIViewControllerAnimatedTransitioning>接口。该接口只有两个方法,transitionDuration和animateTransition,通过animateTransition就能让页面切换时,随心所欲的动起来。
步骤2的代码:
步骤3的代码:
Demo下载
上述的方法都是支持iOS7的,但在使用的时候可能会用到iOS8的方法,需要注意。
自定义的步骤:
1、准备两个UIViewController,通常是从presentdingViewController(简写presenting)跳转到 presentedViewController(简写presented);
2、presenteing中需要实现<UIViewControllerTransitioningDelegate>接口,然后重写该接口中的方法animationControllerForPresentedController、animationControllerForDismissedController。如果presentingVC中调用了[self presentViewController:
],则会执行接口中的方法,这个方法就会返回自定义转场的效果;
3、第二步中animationControllerForPresentedController方法应该返回转场动画的对象,它实现了<UIViewControllerAnimatedTransitioning>接口。该接口只有两个方法,transitionDuration和animateTransition,通过animateTransition就能让页面切换时,随心所欲的动起来。
步骤2的代码:
#pragma mark UIViewControllerTransitioningDelegate - (id<UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController:(UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source{ return [BPTransitionAnimator new]; // return [[BPPresentaionController alloc] initWithPresentedViewController:presented presentingViewController:presenting]; } - (id<UIViewControllerAnimatedTransitioning>)animationControllerForDismissedController:(UIViewController *)dismissed { return [BPTransitionAnimator new]; }
步骤3的代码:
// // BPTransitionAnimator.m // Demo // // Created by bingcai on 16/4/18. // Copyright © 2016年 Linda. All rights reserved. // #import "BPTransitionAnimator.h" @implementation BPTransitionAnimator - (NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext{ return 1.0; } - (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext{ UIViewController *fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; UIView *containerView = [transitionContext containerView]; UIView *fromView = [transitionContext viewForKey:UITransitionContextFromViewKey]; UIView *toView = [transitionContext viewForKey:UITransitionContextToViewKey]; fromView.frame = [transitionContext initialFrameForViewController:fromViewController]; toView.frame = [transitionContext finalFrameForViewController:toViewController]; fromView.alpha = 1.0; toView.alpha = 0.0; [containerView addSubview:toView]; NSTimeInterval transitionDuration = [self transitionDuration:transitionContext]; [UIView animateWithDuration:transitionDuration animations:^{ fromView.alpha = 0.0; toView.alpha = 1.0; } completion:^(BOOL finished){ BOOL isCancelled = [transitionContext transitionWasCancelled]; [transitionContext completeTransition:!isCancelled]; }]; } @end
Demo下载
上述的方法都是支持iOS7的,但在使用的时候可能会用到iOS8的方法,需要注意。
相关文章推荐
- iOS点击图片全屏放大效果
- ios排序(对象排序,字母,数字)
- ios开发-- 开发细节(代理传值)
- iOS_导入libxml2.2框架后,找不到<libxml/tree.h>的解决办法
- iOS-基于AVPlayer的视频播放器代码封装-0-需求分析与框架设计阶段
- iOS -- 常用pch宏 <二>
- 【iOS】返回崩溃:nested pop animation can result in corrupted navigation bar nested pop animation can re
- Github 上的 iOS 开源项目
- iOS清理缓存 2016-04-19
- iOS - 出现( linker command failed with exit code 1)错误总结
- iOS - 时间日期
- 给char数组或者结构体赋值
- IOS开发之—— 客服QQ(调用qq网页聊天),客服热线(拨打电话)
- IOS开发-删除所有子view
- iOS 反射 学习 和 运用
- iOS基础调试 console
- iOS开发中的错误整理,通过storyboard做项目,遇到view看不见,或者view被压缩的情况
- ios根据颜色返回图片
- iOS tableview cell下拉展开显示详情选择城市
- iOS边练边学--菜单悬停效果的实现思路