2014-09-15 5 views
23

So hatte ich eine vollständige funktionierende Lösung in iOS7, die einen LoginViewController über presentViewController in AppDelegate didFinishLaunching anzeigt.presentViewController in AppDelegate mit Verzögerung in iOS8

Grundsätzlich ich so etwas wie dies tue:

UIViewController *backgroundViewController = ... 
self.window.rootViewController = backgroundViewController; 
[self.window makeKeyAndVisible]; 

[self.window.rootViewController presentViewController:loginViewController 
              animated:NO ...] 

In iOS8 ich einen Sprung zu sehen. Zuerst sehe ich den backgroundViewController und nach etwa 1 Sekunde erscheint die Anmeldung.

Also, wie kann ich diesen Sprung in iOS8 verhindern?

Ich sehe, dass a ton von developers mit dieser kind of problem sind, aber immer noch keine Lösung gefunden.

+0

Haben Sie eine Lösung gefunden? Ich habe das gleiche Problem mit iOS 8 auf dem iPhone 5S gesehen. Aber Xcode 6 Simulator zeigt normale Animation auf iPhone 6/6 + Simulatoren. – marsant

+0

Auch nach einer Lösung suchen – SomeGuy

+0

Der Simulator hat auch dieses Problem, aber Sie können es nicht so klar sehen, weil es schneller ist. Die einzige Lösung, die ich gefunden habe, ist, diese Animation selbst zu erstellen, über einen Container-View-Controller. Allerdings hat meine Lösung einige Probleme mit tabviewcontrollers:/(viewDidAppear wird nicht aufgerufen, wenn wir Viewcontrollers ändern) –

Antwort

0

Ich habe konfrontiert auch das gleiche Problem in iOS8 und ich fand diese Lösung:

ABCViewController *obj = [[ABCViewController alloc] initWithNibName:@"ABCViewController" bundle:nil];       

CATransition *transition = [CATransition animation]; 
transition.duration = 0.4; 
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
transition.type = kCATransitionMoveIn; 
transition.subtype = kCATransitionFromBottom; 
transition.delegate = self; 
[self.navigationControler.view.layer addAnimation:transition forKey:nil]; 
[appDelegate.navigationControler obj animated:NO]; 
obj = nil; 

ich diese Lösung hoffen, dass Sie helfen können!

1

Sie können das Fenster auf eine Instanz eines temporären Controllers einstellen.

Vom Set-Controller (LoginViewController) können Sie Ihren echten Login-Controller mit dem gewünschten Übergang schieben. Sobald die Login-Sequenz beendet ist, können Sie vom Login-Controller zum Standard-Root-View-Controller der Anwendung wechseln.

[UIView transitionWithView:[AppGlobal sharedApp].applicationWindow 
    duration:0.75 
    options:UIViewAnimationOptionTransitionFlipFromLeft 
    animations:^{ 
    [AppGlobal sharedApp].applicationWindow.rootViewController = [AppRootViewController new]; 
    } completion:nil]; 
2

Ich habe eine kurze Hacky fix:

//Make a screenshot of the ViewController first, or use a real image if you want 

__block UIImageView *fakeImageView = [[UIImageView alloc] initWithImage:image]; 
fakeImageView.frame = vc.view.frame; 
[self.view addSubview:fakeImageView]; 

[self presentViewController:vc animated:animated completion:^{ 
    [fakeImageView removeFromSuperview]; 
    fakeImageView = nil; 
}]; 

Es ist nicht gut für langfristige, aber dieses Problem schnell beheben kann, ohne zu viel Code zu ändern.

Warten auf bessere Lösungen.

17

auch ein Hack (bis jetzt), aber nur eine Zeile Code

Fügen Sie die Ansicht des View-Controllers Sie vor der Vorlage an das Fenster präsentiert

UIViewController *viewController = [[UIViewController alloc] init]; 
[viewController.view setBackgroundColor:[UIColor greenColor]]; 

// Temporary iOS8 fix for 'presentation lag' on launch 
[self.window addSubview:viewController.view]; 

[self.window.rootViewController presentViewController:viewController animated:NO completion:nil]; 

Wenn Sie ein präsentieren Navigationscontroller als die Ansicht des Navigationscontrollers anstelle des Topview-Controllers hinzufügen.

+0

Werke. aber Statusleiste wird ein bisschen funky. – markturnip

+0

@markturnip ist das in Bezug auf die Farbe? Ich habe festgestellt, dass dies am besten funktioniert, wenn die Farbe der Statusleiste zwischen beiden View-Controllern gleich ist. Erhalten Sie ein anderes seltsames Verhalten mit der Statusleiste? – SomeGuy

+0

Das funktioniert aber wie von @markturnip erwähnt ändert sich die Statusleiste color =/ –

-3

Dies sollte funktionieren: Aufruf [loginViewController Ansicht] Bevor es zu präsentieren.