iOS平滑式特点的过场动画实现
来源:互联网 发布:linux终端 中文 问号 编辑:程序博客网 时间:2024/05/22 10:21
前言
之前看到一些打车软件的界面,发现这些界面的滑动不是很硬的切换,而是很平滑的就滑动过来了,所以,自己调研了一下,找了一些资料,把功能实现了,把步骤的大概和大家分享一下.
分析
首先,我封装了一个单例模式MBTransition基类,使用单例模式的原因有两个:
- 在一个App中,同时存在的过场只会有一个。
- 实现成单例之后过场对象就不需要依赖于某个UIViewController。
- (id<UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController animationControllerForOperation:(UINavigationControllerOperation)operation fromViewController:(UIViewController *)fromVC toViewController:(UIViewController *)toVC { returnself;//返回self表示代理由类本身实现}
Present时自定义过场的代理
- (id <UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController:(UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source{ returnself;}
Dismiss时自定义过场的代理
-(id <UIViewControllerAnimatedTransitioning>)animationControllerForDismissedController:(UIViewController *)dismissed{ returnself;}
实现具体自定义过场动画效果的代理,这个代理也是实现动画效果的核心
- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext{}
过场动画时间的代理
- (NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext{returnself.duration;}
通过上面几个代理我们可以知道:Push/Pop和Present时过场动画的代理是不一样的
接下来分析一下 (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
代理
1.通过 transitionContext
获取到过场时切换的两个UIViewController
2.通过 transitionContext
获取到执行切换的UIView
3.通过 transitionContext
获取到过场的持续时间
4.最后通过 transitionContext
获取到过场时切换的 fromVC 和 toVC 和Push/Present时保存的 fromVC 和 toVC 进行比较就可以知道目前执行的是Push/Present还是Pop/Dismiss,从而可以为Push/Present和Pop/Dismiss定制不同的动画效果
5.接下来就是具体的过场动画部分了,其实就是结合fromVC的view、toVC的view和container做一些动画效果
特点
- 如果要实现其他自定义过场,只需要继承MBTransition,然后重写
(void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
代理即可。 - 使用者只需调用一个接口即可实现自定义过场,降低了代码耦合。
- iOS平滑式特点的过场动画实现
- iOS 自定义过场动画
- ios addSubView 过场动画
- 安卓中一些界面过场动画的实现
- iOS过场动画调研笔记
- activitiy切换的过场动画
- Activity过场动画的设置
- 布局改变时的过场动画
- viewcontrollers 过场动画切换示例(iOS 5)
- oc开发笔记5 iOS addsubview 使用过场动画
- android 的过场页面的实现
- activity 过场动画
- 自定义 Android 过场动画
- ActivityOptions过场动画
- Android5.0Activity的转场动画、过渡动画、过场动画、跳转动画
- 使用requestAnimationFrame实现平滑高效的javascript动画
- 用二次函数实现平滑的手势驱动动画
- 给view添加过场动画
- 【english】重识SLA
- 调用system函数时输出重定向,导致输出顺序错乱
- Gradle的安装
- bones脚本篇 - 内置标签root
- Android通用标题栏
- iOS平滑式特点的过场动画实现
- linux主机名与IP地址配置文件
- Unicode标准规范和Unicode编码方案
- spring配置文件
- 代码大全第二版读书笔记 第五部分-代码改善 二十二、开发者测试
- nyoj 62 笨小熊
- Linux strace命令
- 简述j2ee之servlet
- 再说说iOS的状态栏(显示与隐藏)