2016-07-14 22 views
1

So in meiner App bekomme ich leere Bildschirme zwischen den View-Controller Navigation. Ich dachte, dass disneyViewControllerAnimated der Schuldige war. So an einer Stelle geändert ich dies unter Code -disneyViewControllerAnimated verursacht schwarzen Bildschirm ios Ziel c

[vc dismissViewControllerAnimated:YES completion:^() { 
     BCDThankYouViewController *thankuView=[[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"ThankyouView"]; 
     [[self topViewController ]presentViewController:thankuView animated:YES completion:nil]; 
    }]; 

Mit diesem Code unten -

[vc dismissViewControllerAnimated:YES completion:nil]; 
BCDThankYouViewController *thankuView=[[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"ThankyouView"]; 
      [[self topViewController ]presentViewController:thankuView animated:YES completion:nil]; 

Wo vc ist -

UIViewController *vc = self.presentingViewController; 
    while (vc.presentingViewController) { 
     vc = vc.presentingViewController; 

    } 

Und es funktionierte. Aber in einem anderen Teil meiner app habe ich Code wie folgt unten -

[weakPresentingViewController dismissViewControllerAnimated:_animateClosingModal completion:^{ 
      [weakSelf handleDelayedLoginActions:userInfo withPortfolio:portfolio]; 
     }]; 

habe ich es mit -

[weakPresentingViewController dismissViewControllerAnimated:_animateClosingModal completion:nil]; 
      [weakSelf handleDelayedLoginActions:userInfo withPortfolio:portfolio]; 

Aber noch sehe ich einen leeren Bildschirm vor meiner nächsten Seite geladen wird. In diesem obigen Stück Code ist schwachPresentingViewController

id __weak weakSelf = self; 
    UIViewController * __weak weakPresentingViewController = (UIViewController *)_loginManagerDelegate; 

Bitte lassen Sie mich wissen, was hier falsch ist? Warum erhalte ich vor dem Laden der Seite einen schwarzen Bildschirm?

Antwort

0

Der erste Präsentations-Controller benötigt Zeit, um es zu tun.

Sobald Sie den Code in den Ablehnungsblock, dh nach dem Ablehnen der Animation ist vorbei, dann beginnt die Präsentation, und wie wir wissen, erfordert die Präsentation Zeit, so dass es sehr kurze Zeit hat das Schlüsselfenster hat keine View-Controller Sicher wirst du einen schwarzen Bildschirm sehen.

Wenn Sie den Code aus dem Block entlassen, wird der Code nacheinander aufgerufen, aber die Kündigung hat eine Animation, die für eine sehr kurze Zeit dauern, so wenn die Kündigung animiert ist, der Code für die Darstellung zu sehen Controller wird ausgeführt, so dass wir nach einer sehr kurzen Zeit der Ablehnungs-Animation nun den Bildschirm hinter dem entlassenen View-Controller sehen können, dann ist das Präsentieren beendet, so dass Sie keinen schwarzen Bildschirm sehen können.

Aber ich muss sagen, auch wir werden nicht den schwarzen Bildschirm bekommen, es bedeutet nicht, dass der Code gut ist.

Meiner Meinung nach ist es viel besser, einen besseren Workflow für die App zu erstellen, wie z. B. Präsentieren, Verwerfen, Drücken, Pop usw., um einen leeren Stammansicht-Controller des Schlüsselfensters zu vermeiden.