iOS DeveloperiOS开发的正确姿势iOS点点滴滴

iOS视图控制器转场

2016-05-29  本文已影响305人  飞鱼非鱼会飞

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

上一篇下一篇

猜你喜欢

热点阅读