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

5
我正在尝试在两个不同的活动模态视图控制器之间切换,并希望进行平滑的动画。理想情况下,我希望动画看起来就像新的模态视图正在覆盖当前模态视图一样。
为了保持应用程序的一致性,我需要限制每次只显示一个层级的模态视图控制器。
目前,我只是让现有的模态视图以无动画方式消失,然后将下一个模态视图动画显示在RootController上,但这看起来不太好。
谢谢。
1个回答

8
您可以使用默认转换将第二个模型视图控制器放在第一个上面展示。听起来您的第二个模型视图是在与第一个模型视图相同的视图控制器中分配和初始化的。如果是这种情况,请考虑重构您的代码,使第一个模型视图控制器呈现第二个模型视图控制器。这样做会像您想要的那样显示一个在另一个之上。
如果您需要保持在同一个根视图控制器中呈现两个模态视图控制器的代码,您可能希望创建一个代理方法。这将从第一个模态视图控制器向呈现它的根视图控制器发送消息,传递对第一个模态视图控制器的引用。然后,使用此引用告诉第一个模态视图控制器在其上方呈现第二个模态视图控制器。
我肯定推荐前一种解决方案,因为它在逻辑上更清晰,减少了引入保留循环的机会。
针对您的澄清回答:
要在两者之间进行转换,请尝试:
在您已经从上一个会话中显示的ModalViewControllerOne实例中:
self.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self dismissModalViewControllerAnimated:YES];

在您的根视图控制器的-viewDidAppear:方法中:
ModalViewControllerTwo *modalViewControllerTwo = [[ModalViewControllerTwo alloc] init];
modalViewControllerTwo.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[rootViewController presentModalViewController:modalViewControllerTwo animated:YES];

这意味着要将第一个模态视图控制器与根视图控制器进行交叉溶解,然后立即将新的模态视图控制器交叉溶解回屏幕上。
如果闪屏之间只是视图不同,您可以使用一个带有逻辑的视图控制器,根据输入的URL简单地交换一个视图以替换另一个视图,并在视图之间切换时使用动画。

每个模态显示实际上都是不同的闪屏/登录界面。根据输入应用程序的URL,我会显示不同的模态闪屏。因此,如果从应用程序的先前使用中弹出了闪屏1,并且他们从请求闪屏2的URL进入应用程序,则希望从闪屏1平稳过渡到闪屏2,而不是两者同时出现,一个在另一个之上。 - FishStix
我只跟踪一个UINavigationController作为我的“modalController”,并将一堆ViewControllers传递给一个委托方法。如果window.rootController有一个“presentedController”,那么它正在呈现modalController,我只需用动画替换viewControllers即可。否则,我仍然设置modalController的视图控制器,并调用window.rootController presentModalViewController:modalController。 - FishStix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接