- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
自定义转场动画--Swift3.0版本
自定义转场动画--Swift3.0版本
转场动画这事,说简单也简单,可以通过presentViewController:animated:completion:和dismissViewControllerAnimated:completion:这一组函数以模态视图的方式展现、隐藏视图。如果用到了navigationController,还可以调用pushViewController:animated:和popViewController这一组函数将新的视图控制器压栈、弹栈。
下图中所有转场动画都是自定义的动画,这些效果如果不用自定义动画则很难甚至无法实现:
demo演示
由于录屏的原因,有些效果无法完全展现,比如它其实还支持横屏。
自定义转场动画的效果实现起来比较复杂,如果仅仅是拷贝一份能够运行的代码却不懂其中原理,就有可能带来各种隐藏的bug。本文由浅入深介绍下面几个知识:
传统的基于闭包的实现方式及其缺点
自定义present转场动画
交互式(Interactive)转场动画
转场协调器与UIModalPresentationCustom
UINavigationController转场动画
我为这篇教程制作了一个demo,您可以去在我的github上clone下来:CustomTransition,如果觉得有帮助还望给个star以示支持。本文以Swift+纯代码实现,对应的OC+Storyboard版本在demo中也可以找到,那是苹果的官方示范代码,正确性更有保证。demo中用到了CocoaPods,您也许需要执行pod install命令并打开.xcworkspace文件。
在开始正式的教程前,您首先需要下载demo,在代码面前文字是苍白的,demo中包含的注释足以解释本文所有的知识点。其次,您还得了解这几个背景知识。
From和To
在代码和文字中,经常会出现fromView和toView。如果错误的理解它们的含义会导致动画逻辑完全错误。fromView表示当前视图,toView表示要跳转到的视图。如果是从A视图控制器present到B,则A是from,B是to。从B视图控制器dismiss到A时,B变成了from,A是to。用一张图表示:
from和to
Presented和Presenting
这也是一组相对的概念,它容易与fromView和toView混淆。简单来说,它不受present或dismiss的影响,如果是从A视图控制器present到B,那么A总是B的presentingViewController,B总是A的presentedViewController。
modalPresentationStyle
这是一个枚举类型,表示present时动画的类型。其中可以自定义动画效果的只有两种:FullScreen和Custom,两者的区别在于FullScreen会移除fromView,而Custom不会。比如文章开头的gif中,第三个动画效果就是Custom。
基于block的动画
最简单的转场动画是使用transitionFromViewController方法:
传统的转场动画实现
这个方法虽然已经过时,但是对它的分析有助于后面知识的理解。它一共有6个参数,前两个表示从哪个VC开始,跳转到哪个VC,中间两个参数表示动画的时间和选项。最后两个参数表示动画的具体实现细节和回调闭包。
这六个参数其实就是一次转场动画所必备的六个元素。它们可以分为两组,前两个参数为一组,表示页面的跳转关系,后面四个为一组,表示动画的执行逻辑。
这个方法的缺点之一是可自定义程度不高(在后面您会发现能自定义的不仅仅是动画方式),另一个缺点则是重用性不好,也可以说是耦合度比较大。
在最后两个闭包参数中,可以预见的是fromViewController和toViewController参数都会被用到,而且他们是动画的关键。假设视图控制器A可以跳转到B、C、D、E、F,而且跳转动画基本相似,您会发现transitionFromViewController方法要被复制多次,每次只会修改少量内容。
自定义present转场动画
出于解耦和提高可自定义程度的考虑,我们来学习转场动画的正确使用姿势。
首先要了解一个关键概念:转场动画代理,它是一个实现了UIViewControllerTransitioningDelegate协议的对象。我们需要自己实现这个对象,它的作用是为UIKit提供以下几个对象中的一个或多个:
Animator:
它是实现了UIViewControllerAnimatedTransitioning协议的对象,用于控制动画的持续时间和动画展示逻辑,代理可以为present和dismiss过程分别提供Animator,也可以提
您可能关注的文档
最近下载
- 电子测量技术(第5版)全套PPT课件.pptx
- QGDW 1152.2-2014- 电力系统污区分级与外绝缘选择标准 第2部分:直流系统.pdf VIP
- 中小学学三年发展规划(2025-2028).docx VIP
- J-T-G- 5120-2021 公路桥涵养护规范(正式版).docx VIP
- 建筑工程图集 20CJ95-1:装配式保温楼地面建筑构造——FD干式地暖系统.pdf VIP
- 3 电子银行_纵横商务汉语 中级阅读2.pptx VIP
- 阿那亚品牌手册.pdf VIP
- 二氧化碳气瓶瓶阀爆破片爆破浅析 .docx VIP
- 隧道二衬施工缝缺陷处理方案.docx VIP
- 2025年秋学期冀教版小学数学二年级上册教学进度表.docx VIP
文档评论(0)