iOS视图控制器转场

作者: 飞鱼非鱼会飞 | 来源:发表于2016-05-29 15:46 被阅读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

    相关文章

      网友评论

        本文标题:iOS视图控制器转场

        本文链接:https://www.haomeiwen.com/subject/xshzrttx.html