2016-07-14 111 views
1

因此,在我的應用程序中,我得到了視圖控制器導航之間的空白屏幕。我覺得dismissViewControllerAnimated是罪魁禍首。因此,在一個地方,我改變了這下面的代碼 -dismissViewControllerAnimated導致黑屏ios目標c

[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

首先呈現視圖控制器需要時間去做。

將代碼放入dismiss塊後,這意味着在關閉動畫結束後,呈現開始,並且正如我們所知,呈現需要時間,因此關鍵窗口沒有視圖控制器的時間很短,當然你會看到一個黑屏。

當你把代碼從dismiss區塊中移出時,代碼將被逐一調用,但是dismiss有一個持續很短時間的動畫,所以當dismiss動畫的時候,呈現view的代碼控制器被執行,所以在非常短的解除動畫時間後,我們現在可以看到被解除視圖控制器後面的屏幕,然後完成呈現,所以你看不到黑屏。

但是我不得不說,即使我們不會得到黑屏,這並不意味着代碼是好的。

在我看來,爲了避免關鍵窗口的空根視圖控制器,爲應用程序創建更好的工作流程(如存在,解僱,推送,流行等等)會好得多。