【问题标题】:Custom animation for unwind segue when unwinding few steps back - problems and what is the right way to do it?退后几步展开时展开segue的自定义动画 - 问题和正确的方法是什么?
【发布时间】:2015-08-18 18:26:50
【问题描述】:

假设我有 3 个UIViewController - A、B 和 C。AB 和 BC 之间的过渡是通过两种方式的不同动画过渡完成的 - 向前和向后(展开 segue动画)子类化UIViewControllerTransitioningDelegateUIViewControllerAnimatedTransitioning。仅向前或向后一步的过渡效果很好,但是当我尝试从 C->A (如主页按钮)退后多步时 - B 显示时没有动画,然后播放 B->A 自定义动画,这看起来很奇怪。 viewWillApper 为链上的所有中间视图控制器调用(在我的示例 B 中)。几乎就像以这种方式从 C->A 展开 - C->B->A 而不是 C->A (请注意 - 只播放 B->A 动画,不播放 C->B 动画玩过)。我想要的只是 C->A(不是 B->A)动画,而不显示任何其他中间视图控制器或调用它们的 viewWillAppear 方法。我希望能够为 C->A 设置自定义展开转场动画。我怎样才能做到这一点?

注意 1:我没有将我的控制器嵌入 UINavigationController 并且我不希望这样做,因为据我所知(如果我错了,请纠正我)它不是很灵活或至少可扩展为不同的自定义动画之间不同的步骤。两种方式我都不想使用它。

注意 2:我试图覆盖

override func segueForUnwindingToViewController(toViewController: UIViewController, fromViewController: UIViewController, identifier: String?) -> UIStoryboardSegue

在 A 中并返回自定义 segue(UIStoryboardSeguederived 类)以从 C->A 展开。该方法被调用,但动画正在开始,并在中间切换到 B->A 动画转换委托动画(我已设置为在 B->A 之间转换)。所以这也不起作用。

我做错了什么?我很确定 Apple 开发人员已经解决了这个问题并制作了某种 API 或类似的东西。 Apple 文档中没有关于如何使用自定义动画来放松几步。

最后一件事 unwind segue 退后几步是完美的,只是自定义动画不是或者至少我不能让它工作。

我们将不胜感激任何帮助。

【问题讨论】:

  • 您可以在某处添加您的代码或它的骨架吗?我可能知道如何做你想做的事
  • 这似乎在讨论您要做什么。特别是跳过中间控制器。 stackoverflow.com/questions/26785511/…
  • 骨架和link中的一样。是的,这个解决方案将解决我的问题(使用 UINavigationController),我只是想知道是否有另一种方法,我不想让我的一个导航控制器掌握一切,我想尽可能地解耦导航控制器,包括他们的交易。

标签: ios objective-c swift animation uikit


【解决方案1】:

观看今年 WWDC 的以下视频(大约 30 分钟)。底部还有一个示例代码的链接。

https://developer.apple.com/videos/wwdc/2015/?id=215

不过,您可能需要等待 iOS 9 :)

祝你好运!

【讨论】:

    【解决方案2】:

    我了解您在问题中明确表示您不想使用UINavigationController,我理解这一点。所以需要接受这个答案。

    但我仍然会提倡在这种情况下使用 UINavigationController,因为它提供了很多帮助跟踪导航,并且 如果扩展实际上非常灵活,甚至通过 @987654323 提供自定义转换@ 和 UIViewControllerAnimatedTransitioning

    在导航方面,您可以手动操作导航堆栈,使用.pushToViewController().popViewController() 或直接操作.viewControllerspopToRootController() 中的控制器列表。

    我在一个需要大量过渡的游戏中使用了UIKitUINavigationController,在我看来,它可能需要进行大量自定义,但仍然可以在导航方面提供大量帮助。

    【讨论】:

    • 是的,你是对的,我知道添加 UINavigationController 将为我解决问题,我什至可以继承它并覆盖 segueForUnwindingToViewController 以返回自定义展开 Segue 以在 C 和 A 之间进行动画处理,但是只是使代码过于复杂,使导航控制器成为一切的主人。它必须了解应用程序中的每个控制器
    猜你喜欢
    • 2017-02-15
    • 1970-01-01
    • 1970-01-01
    • 2014-08-11
    • 1970-01-01
    • 2014-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多