0

そのため、通常のUIViewタイトル画面を持つゲームを作成しています。ユーザーが[ゲームの開始]ボタンを押すと、ロード画面を表示してタイトルビューを削除し、ゲームビューを初期化して追加します。ロード画面ののスーパービュー(windowこの場合) 。

残念ながら、最終的には、[ゲームの開始]ボタンをタッチするとUIが数秒間ブロックされ、ロード画面が1ミリ秒間画面上でブリップしてから、ロードされたゲームビューが開始されます。ロギングも追加しました。UIがブロックされている間、ロギングメッセージがコンソールに表示されます。

問題の方法は次のとおりです。

-(void)switchToGame{
    NSLog(@"adding loading");
    loadingScreen = [[UIImageView alloc] initWithImage:
                 [UIImage imageNamed:@"loading_screen.jpg"]];
    [self.window addSubview:loadingScreen];

NSLog(@"removing titlescreen");
[titleView.view removeFromSuperview];
self.titleView = nil;

if(self.gameView == nil){

    gmViewController *g = [[gmViewController alloc] 
                                 initWithNibName:@"gmViewController"
                                          bundle:nil];
    self.gameView = g;
    [gameView setIsLoading:YES];
    self.gameView.parent = self;
    [g release];
}



NSLog(@"inserting gameview");
[self.window insertSubview:gameView.view belowSubview:loadingScreen];
[self.window setRootViewController:gameView];
[self setGameIsActive:YES];
[gameView startAnimation];

//remove the loading screen
NSLog(@"killing loading");
[loadingScreen removeFromSuperview];
[loadingScreen release];
[gameView setIsLoading:NO];

}
4

1 に答える 1

0

この質問を忘れていました。

ロード画面の追加を独自の機能に移動することで解決しました。

- (void)addLoadingScreen
{
    loadingScreen = [[UIImageView alloc] initWithImage:
                 [UIImage imageNamed:@"loading_screen.jpg"]];
    [self.window addSubview:loadingScreen];
}

そして、それを独自のスレッドで実行します。

[NSThread detachNewThreadSelector:@selector(addLoadingScreen)];
于 2012-11-03T01:22:18.420 に答える