假设我有 3 个 UIViewController
- A、B 和 C。A<->B 和 B<->C 之间的转换是通过两种不同的动画转换完成的 - 向前和向后(unwind segue 动画)子类化 UIViewControllerTransitioningDelegate
和 UIViewControllerAnimatedTransitioning
。仅向前或向后一步的过渡效果很好,但是当我尝试从 C->A(如主页按钮)向后退一步以上时 - B 显示时没有动画,然后播放 B->A 自定义动画,这看起来很奇怪。 viewWillApper
为链上的所有中间 View Controller 调用(在我的示例 B 中)。这几乎就像从 C->A 展开是这样完成的 - C->B->A 而不是 C->A(有一点 - 只播放 B->A 动画,不播放 C->B 动画玩过)。我想要的只是 C->A(不是 B->A)动画,不显示任何其他中间 View Controller 或调用它们的 viewWillAppear
方法。我希望能够为 C->A 设置自定义展开转场动画。我怎样才能做到这一点?
注意 1:我没有将我的 Controller 嵌入到 UINavigationController 中,我也不想这样做,因为据我所知(如果我错了请纠正我)它不是很灵活或者至少对于不同的自定义动画之间是可扩展的不同的步骤。无论哪种方式,我都不想使用它。
注意 2:我试图覆盖
override func segueForUnwindingToViewController(toViewController: UIViewController, fromViewController: UIViewController, identifier: String?) -> UIStoryboardSegue
在 A 中并返回自定义 segue(UIStoryboardSegue
派生类)以从 C->A 展开。该方法已调用,但动画正在启动并在中间切换到 B->A 动画过渡委托(delegate)动画(我已将其设置为在 B->A 之间进行过渡)。所以这也不起作用。
我做错了什么?我很确定 Apple 开发人员已经解决了这个问题并制作了某种 API 或类似的东西。 Apple 文档中没有任何关于如何使用自定义动画后退几步的内容。
最后一件事 unwind segue 退后几步是完美的,只是自定义动画不是或者至少我不能让它工作。
任何帮助将不胜感激。
最佳答案
我明白在你的问题中你明确表示你不想使用 UINavigationController
,我明白这一点。所以需要接受这个答案。
但我仍然会提倡在这种情况下使用 UINavigationController
,因为它提供了很多帮助跟踪导航,而且 如果扩展的话实际上非常灵活,甚至提供通过 UINavigationControllerDelegate
和 UIViewControllerAnimatedTransitioning
自定义转换。
在导航方面,您可以使用 .pushToViewController()
和 .popViewController()
手动操作导航堆栈,或者直接操作 中的 Controller 列表>.viewControllers
或 popToRootController()
。
我在一个需要大量转换的游戏中使用了 UIKit
和 UINavigationController
帮助导航。
关于ios - 向后退几步时用于展开 segue 的自定义动画 - 问题以及正确的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30638824/