如何在不使用故事板转场的情况下添加动画链式过渡系统?

Posted

技术标签:

【中文标题】如何在不使用故事板转场的情况下添加动画链式过渡系统?【英文标题】:how to add animated chained transitions system without using storyboards segues? 【发布时间】:2016-05-29 08:40:54 【问题描述】:

我正在开发一个拥有 60 多个屏幕的内容丰富的应用 我想在它们之间制作动画转场而不制作故事板箭头或连接,为了简化事情,假设我只有一个有 9 个屏幕的应用程序,A、B、C、D、E、F、G、H、I

如果我使用storyboards segues,那么我需要在每个屏幕和另一个屏幕之间来回建立联系......最终得到意大利面条/蜘蛛的东西,例如看看这个屏幕,这是因为几乎任何屏幕都可以连接到我正在开发的应用程序中的另一个屏幕

所以,我需要以下帮助,

1- 如何在不使用界面构建器连接的情况下制作动画转场?

我用的是这个

ram.vc = self.storyboard!.instantiateViewControllerWithIdentifier("MeBeforeSignUp") //MeBeforeSignUp
ram.vc.modalTransitionStyle = UIModalTransitionStyle.CrossDissolve
self.presentViewController(ram.vc, animated: true, completion: nil)

2-如何使用后退按钮将其推入堆栈?为了解释这一点,我的意思是,我想在一长串的转换中继续,顶部的后退按钮具有相同的导航顺序..

考虑这个导航顺序,从 A -> B -> C -> ...

顺序:A->B->C->G->F->B->C->A->B->D->B->C 我按顺序从 [A] 移动到 ... [C] 现在我在 [C] 中,我有一个返回按钮可以返回 [B] 现在我在 [B] 中,我有一个返回按钮可以返回 [D] ... 等等,直到我到达 [A] 时没有返回按钮,因为堆栈是空的

为大量屏幕添加此功能的最佳方式是什么?

3- 为什么UIModalTransitionStyle 不提供很多动画?

这些只是我在自动完成中可以看到的动画

CoverVerticalCrossDissolveFlipHorizontalPartialCurl

4- 还有更多我可以使用的动画吗?

5- 为什么没有动画选项?例如CoverVertical 没有速度选项和(从上到下和从下到上)

6- 例如 twitter ios 应用程序有这个无限堆栈系统,你可以从一个帖子到另一个帖子…几十次使用具有堆栈系统的后退按钮,我的目标是这个,但现在我有一个问题,我的问题是,这不会淹没公羊吗? iOS 如何以确保应用不会因内存溢出而崩溃的方式进行管理?

我真的在寻求帮助,我们将不胜感激。

【问题讨论】:

【参考方案1】:

查看UIViewControllerAnimatedTransitioning 协议。这有点难破解,但是一旦你这样做了,你将能够创建任何你想要的动画过渡,而不受 IB 或其默认动画的约束。

基本上,您将像往常一样将初始视图控制器嵌入UINavigationController。连接AnimatedTransitioning 将允许您拦截导航控制器中的每个 Push 和 Pop 并指示它们应该使用什么动画。这将为您提供所需的自定义动画,以及正常的导航堆栈。

至于后退按钮,您要么需要显示自然包含它的导航栏,要么在视图中添加一个按钮,以便从堆栈中弹出视图控制器。

------------- 编辑提供逐点答案 -------------

    您应该使用我上面提到的UIViewControllerAnimatedTransitioning 协议。这是一个很大的话题,但值得庆幸的是,有足够的教程和解释它是如何在线工作的。起初令人困惑,但一旦安顿下来就很棒。不幸的是不是剪切和粘贴答案类型的情况。

    如果您将视图控制器 A 嵌入到 UINavigationController 中,您会立即获得此行为。如果您不想看到屏幕顶部的栏,可以将其隐藏并在适当的时候以编程方式调用popViewController 方法以返回堆栈中的一个viewController。

    模态呈现的视图控制器不会添加到导航控制器的堆栈中,所以我会避免使用presentViewController 或任何模态呈现的转换。为了获得您所追求的行为,您应该使用导航控制器而不是呈现来推送和弹出视图控制器。我真希望他们给我们更多的默认过渡,但我们鼓励开发者创建适合他们应用的自定义过渡。

    使用UIViewControllerAnimatedTranisitioning,您几乎可以创建任何您想要的过渡。通过这种方式,您可以真正发挥创意并为您的应用赋予独特的感觉。

    与 4 的答案相同。您可以控制过渡中每个动画的各个方面。这完全是定制的。

    这是UINavigationController 的默认行为。只要您不将一堆长时间运行的任务留在堆栈中的视图控制器上,您就应该在内存方面很好。无论如何,您不太可能会这样做。

【讨论】:

谢谢,希望有人能详细说明每一个问题,或者提供一些例子。 有很多关于 UIViewControllerAnimatedTransitioning 的教程,对于单个 SO 答案来说是一个相当广泛的主题。我将逐点编辑以回答您的问题。 @DeyaEldeen 逐点添加了一些答案。希望有帮助!

以上是关于如何在不使用故事板转场的情况下添加动画链式过渡系统?的主要内容,如果未能解决你的问题,请参考以下文章

故事板转场覆盖 iPhone 4 和 5 上的垂直过渡

故事板中封面垂直过渡的对面

如何在不使用自动布局的情况下以 XIB/故事板大小查看手机尺寸

没有故事板的过渡动画 segue swift

vue为v-if添加过渡动画效果

禁用转场动画