自定义过渡对我来说相当陌生。我不得不将它们合并到我工作的最后一个项目中,并最终使用 UIViewControllerAnimatedTransitioning 协议(protocol)和自定义 segues。
自定义 segues 看起来更简洁/友好,因为您可以在 Storyboard 中选择它们并完成它。然而,似乎没有一种友好的方式来设置 back/pop segue。我读过关于展开 segues 的文章,但我似乎找不到任何关于将一个 segues 绑定(bind)到导航 Controller 的后退按钮的信息。
UIViewControllerAnimatedTransitioning 协议(protocol)方法有更多设置,但允许您指定 View 的进入和退出。
如果我的应用程序无法使用我的自定义转场弹出,这不是问题,因为应用程序的流程不允许您返回到之前的 View 。大多数应用程序虽然需要这个,因此自定义 segue 似乎毫无值(value),除非您将 UINavigationController 子类化并允许自定义弹出 segues。
我是否遗漏了什么,因为 UIViewControllerAnimatedTransitioning 似乎是在 View Controller 之间实现动画的最佳方法。为什么我要继承 UIStoryboardSegue?
最佳答案
我同意,与其他类型的转场相比,展开转场缺乏文档,但在您掌握了它们之后,它们会非常简单。我的理解是 segues(包括 unwind segues)是 Apple 希望您在 View Controller 之间转换的方式。即使您创建了自定义转场,常规展开转场仍应起作用。
在我自己的工作中,我将 UIStoryboardSegue 子类化,以便在 segue 之间转换时执行自定义动画。以一个广为人知的应用程序为例,当你点击优步应用程序中的菜单按钮时, map View Controller 向下移动,并出现一个表格 View Controller 。当您点击表格中的一行时,新的 View Controller 会从右侧滑入,但 map View Controller 在屏幕上仍然可见。当您点击 map View Controller 时,它会返回到其原始位置。出于某种原因,我相信 Uber 实际上根本没有实现 segues,只是将 View Controller 放在 View Controller 之上,但我已经在我自己的应用程序中使用自定义 segues 实现了类似的东西。这些转场很难用 Apple 的默认转场复制,所以我使用了自定义转场。
如果您将展开转场绑定(bind)到后退按钮,那么您将希望覆盖 uinavigationcontroller 中默认后退按钮附带的正常展开。我发现很难定制那个 segue。我建议隐藏 uinavigationcontroller 附带的默认后退按钮,添加您自己的条形按钮,并将这个新按钮绑定(bind)到 unwind segue。我知道这很烦人,考虑到默认的后退按钮有一些附加功能,例如当标题足够短时使用前一个 View Controller 的标题作为其文本。不幸的是,我认为 Apple 真的想阻止您自定义默认按钮并使其难以更改。我已经遗漏了如何将默认后退按钮替换为自定义后退按钮,所以如果您遇到问题,请告诉我。
无论如何,要创建展开转场,您必须首先在您要展开到(而不是来自)的uiviewcontroller 的类(或父类)中创建一个方法.
- (IBAction) methodName:(UIStoryboardSegue *)segueName
您可以将 methodName 和 segueName 更改为您喜欢的任何内容。现在转到您的 Storyboard ,然后转到包含您正在从 展开的uiviewcontroller 的场景。如果您现在按住 Ctrl 键从这个 uiviewcontroller( Controller 顶部栏左侧的黄色按钮)拖动到退出按钮(同一栏右侧的橙色按钮),您现在将看到弹出菜单up 包含上面的 methodName。单击该方法,现在将创建您的展开转场。
创建展开转场后,您现在可以在 Storyboard左侧的大纲中看到它。如果你点击 segue,你可以检查它并给它一个标识符。
现在处理将它绑定(bind)到后退按钮...
同样,如果您控制从 Storyboard 中的自定义后退按钮(不是默认后退按钮)拖动到类这个 uiviewcontroller,将为您创建一个绑定(bind)到按钮的 IBAction。在这个方法中,加入:
[self performSegueWithIdentifier: segueIdentifier sender:nil];
其中 segueIdentifer 是您为上面的展开转场提供的标识符。现在,当您点击后退按钮时,unwind segue 将被执行。您还可以在执行 unwind segue 之前执行一些动画或其他操作。
我实际上已经完成了一些复杂的自定义展开转场,处理源 View Controller 和目标 View Controller 的动画。如果您可以更具体地说明放松的外观,我可以尽力帮助您。
关于ios - UIViewControllerAnimatedTransitioning 与自定义 UIStoryboardSegue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26151325/