首页 存档 技术 查看内容

详细讲述iOS自定义转场

2018-3-30 13:00 |来自: 互联网 337 0

摘要: 本文是iOS自定义视图控制器转场系列的第一篇。本文重点在于创建自定义动画(非交互式)转场。 当使用传统的iOS应用程序时,我们经常在视图间转场。过去,如果你不想用标准的转场动画,全靠你自己,但在iOS 7中苹果提供 ...

本文是iOS自定义视图控制器转场系列的第一篇。本文重点在于创建自定义动画(非交互式)转场。

当使用传统的iOS应用程序时,我们经常在视图间转场。过去,如果你不想用标准的转场动画,全靠你自己,但在iOS 7中苹果提供了一个新的API让我们自定义这些动画。

iOS提供了一些内置的转场类型。Navigation controllers用push和pop来有层次地导航信息,tab bar controllers用切换tabs来在各部分之间跳转,所有的视图控制器可以根据特定任务模态化地present和dismiss另一个视图控制器。

API介绍

  • 每一个自定义转场涉及三个主要对象:

  • from view controller (消失的那个)

  • to view controller (出现的那个)

  • 一个动画控制器

自定义转场和在自定义之前一样。对于push和pop,意味着调用UINavigationController的push-、pop-、或者set-方法来修改视图控制器的堆栈。对于切换tabs,意味着修改UITabBarController的selectedIndex或selectedViewController属性。对于modal,则意味着调用?[UIViewController presentViewController: animated: completion: ]或?[UIViewController dismissViewControllerAnimated: completion: ]。无论哪种情况,这个步骤都确定了“from view controller”和“to view controller”。

使用一个自定义转场,你需要一个动画控制器。对我来说这是自定义动画转场中最令人困惑的部分,因为每种转场需要的动画控制器不同。下表展示了如何为每种转场提供动画控制器。记着,委托方法总是返回动画控制器。

动画控制器可以是任何遵守UIViewControllerAnimatedTransitioning协议的对象。该协议声明了两个必须要实现的方法。一个提供了动画的时间,另一个执行了动画。这些方法调用时都传递一个上下文。上下文提供了入口来访问信息和你创建自定义转场需要的对象。以下是一些重点:

  • from view controller

  • to view controller

  • 两个视图控制器view的第一帧和最后一帧

  • container view,根据这篇文档,“作为的转场中视图的父视图”

重要:上下文还实现了-completeTransition:,你必须在你自定义转场结束时调用一次。

这是关于自定义转场所有你需要知道的。让我们来看一些例子!

例子

所有这些例子都可以在GitHub找到,你可以克隆这些仓库,然后边往下看边试试这些例子。

这三个例子都直接或子类化地使用了TWTExampleViewController。它只是设置了视图的背景颜色,同时使你能够通过点击任何地方来结束例子回到主菜单。

轻弹push和pop

在这个例子中,目标是让push和pop使用flip动画而不是标准的slide动画。一开始我建立一个navigation controller并把TWTPushExampleViewController的实例当作root。TWTPushExampleViewController添加了一个叫“Push”的右按钮到导航栏。点击它时,一个新的TWTPushExampleViewController的实例被压入navigation的堆栈:

- (void)pushButtonTapped

本文转载自:微信公众账号 - 程序源,版权归原作者所有!

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部