iOS视图控制器转场
iOS官方转场原理
iOS开发里肯定少不了各种转场,切换控制器视图.但有时候我们想自己写点比较绚丽的效果的转场,这时候我们就需要了解苹果官方转场的原理了.看了大神们的博客,希望自己用最口述话的语言来说一说让自己印象更深刻一下.
(1)转场是什么意思,其实就是控制器视图的切换.转场需要做什么呢?无非就是把第一个控制器的视图移除视线,把第二个试图控制器的视图显示出来.中间加上我们需要的动画效果.以后我们把第一个控制器叫做fromVC,第二个叫做toVC.
(2)根据苹果的规则,我们会安排一下几个角色完成转场.1.动画控制器2交互控制器3,转场代理4.转场上下文5.转场容器.这些角色里转场上下文起到特别重要的数据源和处理作用.
(3)我们讲讲他们5个怎么配合的,首先转场容器是相当于父容器把要fromVC和toVC管理起来,一开始fromVC在转场容器里,容器想我该怎么转场啊,这时候转场代理来了,说我给你提供转场动画,还可以帮你解决交互.但是你得把要切换的东西给我.要不然我巧妇难为无米之炊啊.转场容器说好的.我把一切东西都给了转场上下文,你去向它要.然后,转场代理从转场上下文那里拿到数据,给动画控制器说,东西都在这了,你给我做好看点.给交互控制器说东西也给你了,让手势和动画控制器都去配合你,把工作做好.这是他们的关系.
(4)需要特别注意的是,角色的实现,苹果都给了需要的协议,就是说苹果官方,已经告诉我们,这几个角色应该要办什么事做什么工作才能称职.动画控制器需要遵守的<UIViewControllerAnimatedTransitioning>这个协议需要我们实现
1.动画的时间.
2.动画的效果.
交互控制器需要实现的<UIViewControllerInteractiveTransitioning>这个协议需要我们实现.
1.更新动画的进程.
2.完成转场.
3.取消转场.(因为交互转场中途可能取消,比如你划了一半不划了)
转场代理实现的方法就是提供动画控制器和交互控制器,苹果也提供代理了,有<UITabBarControllerDelegate><UINavigationControllerDelegate><UIViewControllerTransitioningDelegate>
转场上下文需要实现的方法就比较多了,苹果也给出了一套协议帮助我们<UIViewControllerContextTransitioning>方法有14个.
1返回转场容器视图
2是否支持动画
3是否支持交互
4是否取消了转场
5转场的模式
6更新转场进度(用在交互转场中)
7完成交互转场
8取消交互转场
9转场结束
10获取转场控制器
11获取转场控制器视图
12目标转换
13开始frame
14结束frame
(5)转场可以说是分为两类,一类是UINavigationController切换和UITabBarController切换,另一类是modal切换.他们最大的不同是,前者,提供容器UINavigationController/UITabBarController,切换视图的时候把fromVC及视图移除,把toVC及视图添加进来.而modal切换,fromVC和toVC是UIKit进行管理的.在present的时候fromVC视图并没有移除原来的视图结构,所以在dismissal时也不用再加进来.
这里只是我只是大概说一下自己的理解,比较具体的实现机制,可以看看代码.
前人写的swift版的Demo,这里是我充当搬运工做的OC版本的Demo