在展示SKScene后取消隐藏UIButton时延迟?

我遇到了一个我没想到的延迟/停顿,到目前为止我的理由让我摸不着头脑。 我有一个简单的游戏设置,其中UIViewController显示了许多UIButtons [PLAY GAME] [VIEW SCORES]等,这反过来呈现了一个不同的SKScene

我的问题是,当我尝试从UIViewController将这些按钮的可见性设置为可见(通常设置为隐藏在viewDidLoad )时,它们需要大约5秒才能实际显示。

 @implementation ViewController - (void)presentTitleScene { // SHOW BUTTONS [[self logoLabel] setHidden:NO]; [[self gameButton] setHidden:NO]; [[self scoreButton] setHidden:NO]; [[self creditsButton] setHidden:NO]; // PRESENT SCENE SKScene *titleScene = [TitleScene sceneWithSize:[[self spriteKitView] bounds].size]; [titleScene setName:@"TITLE_SCENE"]; [titleScene setScaleMode:SKSceneScaleModeAspectFill]; [(SKView *)[self view] presentScene:titleScene]; [self setCurrentScene:titleScene]; } @end 

所有代码都会运行, SKScene正确显示,然后大约5-6秒后出现按钮? 有什么我可以做的(强制更新)或只是一个设计它或与它一起生活的情况?

这在模拟器和设备上都会发生。

编辑:

查看输出日志,您可以在调用preloadTextureAtlases:withCompletionHandler:后清楚地看到: preloadTextureAtlases:withCompletionHandler:执行跳转到另一个线程。 方法preloadTextureAtlases:withCompletionHandler:在主线程上调用,它应该在后台线程上预加载textureAtlas(s),但我认为completionHandler会回调到主线程上,这个假设是正确的还是我的我错了?

EDIT_002:

移动回答如下。

关于preloadTextureAtlases:withCompletionHandler:在后台线程上调用completionHandler,我会假设用于预加载地图集的那个。 我遇到的问题是我使用完成处理程序将NSNotification发送到我的viewController,说“资产已加载,启动游戏”这个问题是“通知是在发送它们的同一个线程中传递的从“所以我的游戏也开始在后台线程。 因此,将UIButtons设置为可见的代码也在同一个后台线程上运行,因此它们的延迟会对可见或隐藏做出反应。