dismissViewControllerAnimated导致黑屏ios目标c

时间:2016-07-14 08:56:59

标签: ios objective-c uiview uiviewcontroller dismiss

所以在我的应用程序中,我在视图控制器导航之间得到了空白屏幕。我认为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;

请告诉我这里有什么问题?为什么我在页面加载之前会出现黑屏?

1 个答案:

答案 0 :(得分:0)

首先呈现视图控制器需要时间来完成它。

一旦你把代码放在dismiss块中,这意味着在关闭动画结束后,然后开始呈现,并且正如我们所知,呈现需要时间,所以关键窗口没有视图控制器的时间很短,你肯定会看到黑屏。

当您将代码放出dismiss块时,代码将被逐个调用,但是dismiss有一个持续很短时间的动画,所以当dismiss是动画时,用于呈现视图控制器的代码是执行的,所以在很长一段时间的解雇动画后,我们现在可以看到被解雇的视图控制器后面的屏幕,然后,演示完成,所以你看不到黑屏。

但我必须说,即使我们不会得到黑屏,也不意味着代码是好的。

在我看来,为应用程序制作更好的工作流程要好得多,例如present,dismiss,push,pop等,以避免关键窗口的空根视图控制器。