所以在我的应用程序中,我在视图控制器导航之间得到了空白屏幕。我认为dismissViewControllerAnimated是罪魁祸首。所以在一个地方我改变了下面的代码 -
[vc dismissViewControllerAnimated:YES completion:^() {
BCDThankYouViewController *thankuView=[[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"ThankyouView"];
[[self topViewController ]presentViewController:thankuView animated:YES completion:nil];
}];
使用以下代码 -
[vc dismissViewControllerAnimated:YES completion:nil];
BCDThankYouViewController *thankuView=[[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"ThankyouView"];
[[self topViewController ]presentViewController:thankuView animated:YES completion:nil];
vc是 -
UIViewController *vc = self.presentingViewController;
while (vc.presentingViewController) {
vc = vc.presentingViewController;
}
它有效。但在我的应用程序的其他部分,我有如下代码 -
[weakPresentingViewController dismissViewControllerAnimated:_animateClosingModal completion:^{
[weakSelf handleDelayedLoginActions:userInfo withPortfolio:portfolio];
}];
我改为 -
[weakPresentingViewController dismissViewControllerAnimated:_animateClosingModal completion:nil];
[weakSelf handleDelayedLoginActions:userInfo withPortfolio:portfolio];
但是在我的下一页加载之前,我仍然看到一个空白的屏幕。在上面这段代码中,weakPresentingViewController是
id __weak weakSelf = self;
UIViewController * __weak weakPresentingViewController = (UIViewController *)_loginManagerDelegate;
请告诉我这里有什么问题?为什么我在页面加载之前会出现黑屏?
答案 0 :(得分:0)
首先呈现视图控制器需要时间来完成它。
一旦你把代码放在dismiss块中,这意味着在关闭动画结束后,然后开始呈现,并且正如我们所知,呈现需要时间,所以关键窗口没有视图控制器的时间很短,你肯定会看到黑屏。
当您将代码放出dismiss块时,代码将被逐个调用,但是dismiss有一个持续很短时间的动画,所以当dismiss是动画时,用于呈现视图控制器的代码是执行的,所以在很长一段时间的解雇动画后,我们现在可以看到被解雇的视图控制器后面的屏幕,然后,演示完成,所以你看不到黑屏。
但我必须说,即使我们不会得到黑屏,也不意味着代码是好的。
在我看来,为应用程序制作更好的工作流程要好得多,例如present,dismiss,push,pop等,以避免关键窗口的空根视图控制器。