0

所以我们正在制作一个具有普通 UIView 标题屏幕的游戏,当用户按下“开始游戏”按钮时,我们尝试放置加载屏幕,移除标题视图,我们初始化游戏视图并将其添加到加载屏幕下方的超级视图(window在我们的例子中) 。

不幸的是,最终结果是 UI 在触摸“开始游戏”按钮后被阻塞了几秒钟,并且我们的加载屏幕在屏幕上闪烁了一毫秒,然后才开始加载游戏视图。我们甚至添加了日志,当 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 回答