25

したがって、AppDelegateのdidFinishLaunchingでpresentViewControllerを介してLoginViewControllerを表示するiOS7で完全に機能するソリューションがありました。

基本的に私はこのようなことをしています:

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

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

iOS8 ではジャンプが見られます。最初に backgroundViewController が表示され、約 1 秒後にログインが表示されます。

では、どうすればiOS8でこのジャンプを防ぐことができますか?

この種の問題を抱えているにもかかわらず、解決策を見つけられなかった多く開発者がいます。

4

5 に答える 5

17

これも (今のところ) ハックですが、コードは 1 行だけです

プレゼンテーションの前に、表示しているView Controllerのビューをウィンドウに追加します

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];

ナビゲーション コントローラーを提示する場合は、トップ ビュー コントローラーの代わりにナビゲーション コントローラーのビューを追加します。

于 2014-10-11T04:53:36.650 に答える
1

ウィンドウを一時コントローラーのインスタンスに設定できます。

self.window.backgroundColor = [UIColor whiteColor]; //do some styling etc.
self.window.rootViewController =  [LoginViewController new]; 
[self.window makeKeyAndVisible];

セット コントローラー (LoginViewController) から、実際のログイン コントローラーを目的のトランジションでプッシュできます。ログイン シーケンスが終了したら、ログイン コントローラーからデフォルトのアプリケーション ルート ビュー コントローラーに移行できます。

[UIView transitionWithView:[AppGlobal sharedApp].applicationWindow
  duration:0.75
  options:UIViewAnimationOptionTransitionFlipFromLeft
  animations:^{
   [AppGlobal sharedApp].applicationWindow.rootViewController = [AppRootViewController new];
  } completion:nil];
于 2014-09-23T14:21:41.927 に答える
0

iOS8 でも同じ問題に直面しており、この解決策を見つけました。

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;

このソリューションがお役に立てば幸いです。

于 2014-09-23T13:34:28.287 に答える