两个Modal ViewControllers之间的动画过渡

Fis*_*tix 5 iphone objective-c modalviewcontroller presentmodalviewcontroller

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

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

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

谢谢

And*_*rew 8

您可以使用默认转换在第一个上显示第二个模型视图控制器.听起来您的第二个模型视图在与第一个模型视图相同的视图控制器中进行分配和初始化.如果是这种情况,请考虑重构代码,以便让第一个模型视图控制器显示第二个模态视图控制器.这样做会像你想要的那样在另一个上面显示.

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

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

回应您的澄清:

要在两者之间转换,请尝试:

在您ModalViewControllerOne已从上一个会话中显示的实例中:

self.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self dismissModalViewControllerAnimated:YES];
Run Code Online (Sandbox Code Playgroud)

在你的rootViewController中 -viewDidAppear:

ModalViewControllerTwo *modalViewControllerTwo = [[ModalViewControllerTwo alloc] init];
modalViewControllerTwo.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[rootViewController presentModalViewController:modalViewControllerTwo animated:YES];
Run Code Online (Sandbox Code Playgroud)

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

如果它只是启动屏幕之间不同的视图,则可以代替两个视图控制器,让一个视图控制器具有逻辑,根据输入的URL简单地为另一个视图交换一个视图,并在交换时使用动画观点.