0

アプリ内に入る前に、サーバーからいくつかの情報をロードするために、アクティビティ インジケーターを含むスプラッシュ スクリーン ビューを表示したいと考えています。以下は私がそれを行う方法です:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    FeedViewController *feedViewController = [[FeedViewController alloc] initWithNibName:@"FeedViewController" bundle:nil];

    MenuViewController *menuViewController=[[MenuViewController alloc] initWithNibName:@"MenuViewController" bundle:nil];
    self.navController = [[UINavigationController alloc] initWithRootViewController:feedViewController];

    IIViewDeckController* deckController =  [[IIViewDeckController alloc] initWithCenterViewController:self.navController leftViewController:menuViewController rightViewController:nil];
    deckController.panningMode=IIViewDeckNoPanning;
    deckController.panningView=menuViewController.view;
    self.window.rootViewController = deckController;

    [self.window makeKeyAndVisible];

    // show splash screen until data is loaded
    SplashScreenViewController *controller = [[SplashScreenViewController alloc] initWithNibName:@"SplashScreenViewController" bundle:nil];
    controller.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    [feedViewController presentModalViewController:controller animated:NO];

     return YES;
}

FeedViewController.m では、次のようにしました。

- (void)viewDidLoad
{
    // load data from a server

    [self performSelector:@selector(dismissSplashScreen) withObject:nil afterDelay:0.0];
}

このコードは iOS6 で非常にうまく機能しますが、iOS5 でテストしたところ、アクティビティ インジケーターが回転するスプラッシュ スクリーンが消えませんでした。スプラッシュ スクリーンの実装方法が間違っているのではないかと思います。(しかし、これが iOS6 で機能する理由がわかりませんか?)

4

1 に答える 1

1

bool 変数を使用してスプラッシュ画面を表示するかどうかを確認することで、この問題を自分で解決しました。スプラッシュ スクリーンを表示するためのコードは、viewDidLoad代わりに FeedViewController のに移動されます。

このアプローチは、iOS5 と iOS6 の両方でうまく機能するようです。

于 2012-12-09T13:40:48.370 に答える