两个模态视图控制器之间的动画过渡

问题描述:

我试图在两个不同的活动模态视图控制器之间切换并尝试平滑动画。理想情况下,我希望动画看起来就像新的“模态视图”正在成为当前“模态视图”的模态视图。两个模态视图控制器之间的动画过渡

为了保证我的应用程序的一致性,我需要限制在任何给定时间只显示一层模态视图控制器。

目前我只有现有的模态视图关闭没有动画,然后通过RootController动画下一个模态视图,但这看起来不太好。

感谢

你可以使用默认的过渡只是目前的第二模型视图控制器在第一。这听起来像你的第二个模型视图正在分配和初始化在与您的第一个模型视图相同的视图控制器。如果是这种情况,请考虑重构代码,以便让第一个模型视图控制器显示第二个模式视图控制器。这样做会像你想要的那样显示一个。

如果您需要在同一个根视图控制器中保留两个模态视图控制器的演示代码,您可能需要创建一个委托方法。这将从第一个模式视图控制器发回一个消息回显示它的根视图控制器,并传递第一个模态视图控制器的引用。接下来,使用此引用来告诉第一个模式视图控制器在其上呈现第二个模式视图控制器。

我肯定会推荐以前的解决方案,因为它在逻辑上更清晰,引入保留周期的可能性较小。

在响应你的澄清:

要在两个之间进行转换,尝试:

在已经从以前的会话显示在您的ModalViewControllerOne例如:

self.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
[self dismissModalViewControllerAnimated:YES]; 

在你RootViewController的的-viewDidAppear:

这样做的想法是将第一个模态视图控制器交叉溶解回根视图控制器,然后立即将新模态视图控制器交叉溶解回到屏幕上。

如果只是在启动画面之间不同的视图,您可以不使用两个视图控制器,而是使用一个具有逻辑的视图控制器,根据输入的URL简单地替换另一个视图,并使用动画当在视图之间交换时。

+0

这些模式显示中的每一个都基本上是一个不同的splash/login屏幕。根据用于输入应用程序的URL,我显示不同的模式飞溅。因此,如果从应用程序的先前使用中启动1,并且他们从请求启动2的URL进入应用程序,我希望从启动1到启动2的平滑过渡,而不必同时启动,一个在另一个之上。 – FishStix

+0

我已经为你更新了我的答案。 – Andrew

+0

我只跟踪一个UINavigationController作为我的“modalController”,并将一堆ViewControllers传递给一个委托方法,如果window.rootController有一个“presentedController”,那么它呈现的是modalController,我只是用动画替换viewControllers。否则,我仍然设置模式控制器的视图控制器和调用窗口。rootController presentModalViewController:modalController – FishStix