2014-10-01 65 views
9

自定义过渡对我来说是相当新的。我必须将它们合并到我工作的最后一个项目中,并最终使用UIViewControllerAnimatedTransitioning协议和自定义段落。UIViewControllerAnimatedTransitioning vs custom UIStoryboardSegue

自定义赛段看起来有点清洁/友好,因为您可以在故事板中选择它们并完成它。然而,似乎没有如此友好的方式来设置后/流行音乐。我已经阅读了有关展开segues,但我似乎无法找到任何东西绑在导航控制器的后退按钮。

UIViewControllerAnimatedTransitioning协议方法有更多的设置,但允许您指定进入和退出视图。

如果我的应用程序无法用我的自定义继续弹出,这不是问题,因为应用程序的流程不允许您返回到先前的视图。大多数应用程序虽然需要这样做,因此自定义的segue似乎毫无价值,除非您继承UINavigationController并允许自定义弹出段。

我错过了什么,因为它似乎UIViewControllerAnimatedTransitioning是视图控制器之间动画采取的最佳方法。为什么我会想要子类UIStoryboardSegue

回答

4

我同意,与其他类型的segues相比,缺乏关于unwind segues的文档,但是在您掌握了它们之后,它们非常简单。我的理解是,segues(包括展开segues)是Apple希望在视图控制器之间转换的方式。即使你创建自定义的赛段,定期展开的赛段仍应该起作用。

在我自己的工作中,我已经创建了一个UIStoryboardSegue的子类,用于在segges之间转换时执行自定义动画。以一个广为人知的应用程序为例,当您点击优步应用程序中的菜单按钮时,地图视图控制器向下移动,并出现一个表格视图控制器。当你点击表格中的一行时,新的视图控制器从右侧滑入,但地图视图控制器仍然可以在屏幕上看到。当你点击地图视图控制器时,它会返回到原来的位置。出于某种原因,我认为Uber实际上并没有实现segues,但只是将视图控制器放置在视图控制器的顶部,但是我在自己的应用程序中实现了一些类似于自定义渐变的东西。这些赛段难以用苹果的默认赛段复制,所以我使用了自定义段落。

如果将一个展开的渐变绑定到后退按钮,那么您将需要覆盖uinavigationcontroller中默认后退按钮的正常展开。我发现很难定制那个segue。我会建议隐藏uinavigationcontroller附带的默认后退按钮,添加您自己的酒吧按钮,并将此新按钮绑定到展开顺序。我知道这很烦人,考虑到默认的后退按钮有一些额外的功能,例如当标题足够短时使用前一个视图控制器的标题作为其文本。不幸的是,我认为苹果真的想阻止你定制默认按钮,并且很难改变。我遗漏了如何用自定义替换默认后退按钮,所以让我知道如果你有麻烦。

不管怎样,创造开卷SEGUE,您必须首先创建uiviewcontroller你平仓(不)在类(或父类)的方法。

- (IBAction) methodName:(UIStoryboardSegue *)segueName 

可以更改methodNamesegueName到任何你喜欢的。现在转到故事板,然后转到包含uiviewcontroller的场景,您将从解开。如果您现在按ctrl将此uiviewcontroller(控制器顶部栏栏左侧的黄色按钮)拖到退出按钮(同一栏右侧的橙色按钮),您现在将看到一个菜单弹出包含上面的methodName。点击该方法,现在将创建展开顺序。

在创建了展开顺序之后,您现在可以在故事板左侧的轮廓中看到它。如果你点击赛格,你可以检查它并给它一个标识符。

我们对付它绑后退按钮...

再次,查看uiviewcontroller你是从平仓,如果从自定义后退按钮(不是默认后退按钮)控件拖到这个uiviewcontroller类的故事板,IBAction将为你绑定到按钮。在此方法中,添加:

[self performSegueWithIdentifier: segueIdentifier sender:nil]; 

其中segueIdentifer是您在上面展示的标识符。现在,当你点击后退按钮时,展开的继续会被执行。你也可以做一些动画,或者在展开顺序执行之前做一些动画。

我实际上已经做了一些复杂的自定义放松处理动画源和目标视图控制器。如果您可以更具体地了解您希望展开展望的方式,我可以尝试帮助您。

+1

感谢您的详细回复。也许你可以添加关于UIViewControllerAnimatedTransitioning的信息,以及什么时候适合使用?谢谢。 – 2015-02-04 22:54:40