你能设置 RootViewController 的动画吗?

Posted

技术标签:

【中文标题】你能设置 RootViewController 的动画吗?【英文标题】:Can you animate setRootViewController? 【发布时间】:2012-03-12 17:33:50 【问题描述】:

我使用的 SplitViewController 不能成为导航控制器的一部分。我在 IBAction 上使用 SetRootViewController,这很好,但它不是动画的。理想情况下,我想使用与导航控制器相同的动画(从左/右滑入),但如果这不可能,我想在需要时使用一致的动画。

【问题讨论】:

你能详细说明你想要什么吗?你想让你的 UISplitViewController 像 UINavigationController 一样在何时何地推送动画? Svc 从第一个屏幕上的 ibaction 加载,用户单击按钮后的视图控制器。我希望 Svc 动画,无论是推动或交叉溶解或其他什么。 【参考方案1】:

对此我不确定,但我会建议以下内容。

UISplitViewController 设置为您的UIWindowrootViewController。在viewDidLoad 中,您使用按钮的UIViewController 作为模式调用presentModalViewController:animated:。确保你没有动画它。这给您一种错觉,即模态视图是您在应用程序启动时看到的第一个视图。 当您按下按钮时,您将使用dismissModalViewControllerAnimated: 为按钮的UIViewController 设置动画。现在您可以选择如何制作动画。您的选择之一是交叉溶解。

【讨论】:

这是一个非常有创意的解决方案,我会试一试,让你知道我的进展情况。 这行得通,而且它是解决问题的好方法——所以你得到了正确的答案——但我不确定我是否真的会使用它。感觉有点乱,有点打破了预期的设计流程;特别是因为 SVC 仅用于应用程序的一部分。 @Dries De Smet--我尝试了你的建议,我在 Svc 的 ViewDidLoad 中将代码编写到 presentModalViewController:animated: 并在 btnClick 上将其关闭.. 但随着 VC 被关闭和 Svc显示 Svc ViewDidLoad: 再次调用导致 presentModalViewController:animated: 被调用,并再次显示 Vc。我是不是做错了什么。【参考方案2】:

使用 ios 5.0,您将能够使用 presentViewController:animated:completion 从初始 rootViewController 呈现 SplitViewController。

在 iOS 5.0 之前,您唯一的机会是在 rootViewController 的视图上使用 transitionFromView:toView:duration:options:completion 方法,这意味着您将需要一些努力来手动将几条消息传递给您的 SplitViewController。 iOS 5.0 之前的版本不支持容器 ViewControllers。

但您可能想重新考虑您的设计。 您应该最初将 SplitViewController 设置为 rootViewController。在应用程序启动时(或在您需要时),您应该以模态方式展示您的 LoginViewController。 当用户成功登录时,您可以使用您想要选择的任何动画来隐藏您的模态视图。

由于 SplitViewController 是您的主 ViewController,它应该是您应用程序的 rootViewController。

【讨论】:

您的解决方案是正确的,但我不同意重新思考设计。他试图做的事情绝对是合乎逻辑的。在许多情况下,您建议的解决方案不起作用。我们使用相同的设计——编写我们自己的屏幕切换机制和我们自己的拆分视图控制器(这真的很容易)。 感谢您的回答 Ben-G。当我尝试 [appDelegate.window setRootViewController:splitViewController]; [splitViewController presentViewController:splitViewController 动画:YES 完成:NULL];我收到错误消息“应用程序试图以模态方式呈现拆分视图控制器 。”。我猜我在某处使用了错误的语法?我同意@Sulthan 关于我所做的设计决策,但感谢您的建议。 关于link,SplitViewController 是一个特例,不允许模态显示。不幸的是,您要么必须使用替代解决方案,要么使用 transitionFromView:toView: 方法,自行处理传递给 splitViewController 的消息。

以上是关于你能设置 RootViewController 的动画吗?的主要内容,如果未能解决你的问题,请参考以下文章

从 rootViewController 设置 UILabel 文本

以编程方式使用 UINavigationController 设置 RootViewController

如何将 RootViewController 设置为 SplitViewController 中的分组表

如何将 tabBarController 设置为 rootViewController

iOS设置 rootViewController

appDelegate 设置 rootViewController 和 viewWillAppear 不被调用?