在呈现SKScene后取消隐藏ui按钮时延迟



我遇到了一个我没有预料到的延迟/暂停,原因到目前为止让我挠头。我有一个简单的游戏设置,其中UIViewController显示了许多ui按钮[PLAY game] [VIEW SCORES]等,这些按钮依次呈现不同的SKScene

我的问题是,当我尝试将这些按钮的可见性设置为可见(之前设置为隐藏在viewDidLoad中)时,从UIViewController他们需要大约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:在主线程上被调用,它应该在后台线程上预加载textureAtlas(s),但我的印象是completionHandler会回调到主线程上,这个假设是正确的还是我错了?

<标题> EDIT_002:

移至下方回答

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

最新更新