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

时间:2016-05-29 08:40:55

标签: ios swift uinavigationcontroller segue

我开发了一款内容丰富的应用,拥有超过60个屏幕 我想在它们之间制作动画片段而不制作故事板箭头或连接,以简化事物,让我们说我只有9个屏幕的应用程序,A,B,C,D,E,F,G,H,我

enter image description here

如果我使用故事板segues,那么我将需要在每个屏幕和来回之间建立连接...最后是意大利面/蜘蛛的东西,看看这个屏幕例如,这是因为几乎任何屏幕都可以导致应用程序中的另一个开发

enter image description here

所以,我需要帮助的是以下内容,

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-> - > B-> D-> B-> C       我按顺序从[A]移动到... [C]       现在我在[C]中,我有一个后退按钮,可以追溯到[B]       现在我在[B]中,我有一个后退按钮,可以追溯到[D] ......       等等,直到我没有后退按钮到达[A],因为堆栈是空的

为很多屏幕添加此功能的最佳方法是什么?

3-为什么UIModalTransitionStyle没有提供大量动画?

这些只是我在自动填充中可以看到的动画

CoverVertical CrossDissolve FlipHorizontal PartialCurl

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

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

6-例如,推特iOS应用程序有这个无限的堆栈系统,你可以从发布到发布到发布...使用具有堆栈系统的后退按钮数十次,我的目标是这个,但现在我有一个问题,我的问题是什么,是不是会淹没公羊? iOS如何管理这一点以确保应用程序不会因为ram flooding而崩溃?

我真的在寻求帮助,我们将非常感激。

1 个答案:

答案 0 :(得分:2)

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

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

对于后退按钮,您需要显示自然包含它的导航栏,或者在视图中添加一个按钮,从视图控制器中弹出视图控制器。

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

  1. 您应该使用我上面提到的UIViewControllerAnimatedTransitioning协议。这是一个很大的话题,但幸运的是,有大量的教程和解释如何在线工作。一开始会感到困惑,但一旦陷入困境就很棒。不幸的是,不是剪贴式的答案类型。

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

  3. 模态呈现的视图控制器未添加到导航控制器的堆栈中,因此我将避免使用presentViewController或任何模态呈现的转换。为了获得您所追求的行为,您应该使用导航控制器而不是存在来推送和弹出视图控制器。我希望他们为我们提供更多默认转换,但我们鼓励开发人员创建适合其应用的自定义转换。

  4. 使用UIViewControllerAnimatedTranisitioning您可以创建您想要的任何转换。您可以真正发挥创意,并以这种方式为您的应用提供独特的感受。

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

  6. 这是UINavigationController的默认行为。只要你不在堆栈中活着的视图控制器上留下一堆长时间运行的任务,你就应该记忆良好。不太可能你会这样做。