你能设置 RootViewController 的动画吗?
Posted
技术标签:
【中文标题】你能设置 RootViewController 的动画吗?【英文标题】:Can you animate setRootViewController? 【发布时间】:2012-03-12 17:33:50 【问题描述】:我使用的 SplitViewController 不能成为导航控制器的一部分。我在 IBAction 上使用 SetRootViewController,这很好,但它不是动画的。理想情况下,我想使用与导航控制器相同的动画(从左/右滑入),但如果这不可能,我想在需要时使用一致的动画。
【问题讨论】:
你能详细说明你想要什么吗?你想让你的 UISplitViewController 像 UINavigationController 一样在何时何地推送动画? Svc 从第一个屏幕上的 ibaction 加载,用户单击按钮后的视图控制器。我希望 Svc 动画,无论是推动或交叉溶解或其他什么。 【参考方案1】:对此我不确定,但我会建议以下内容。
将UISplitViewController
设置为您的UIWindow
的rootViewController
。在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];我收到错误消息“应用程序试图以模态方式呈现拆分视图控制器transitionFromView:toView:
方法,自行处理传递给 splitViewController 的消息。以上是关于你能设置 RootViewController 的动画吗?的主要内容,如果未能解决你的问题,请参考以下文章
从 rootViewController 设置 UILabel 文本
以编程方式使用 UINavigationController 设置 RootViewController
如何将 RootViewController 设置为 SplitViewController 中的分组表