我遇到了一个我没想到的延迟/暂停,到目前为止我的理由让我摸不着头脑。我有一个简单的游戏设置,其中UIViewController
显示了许多UIButtons [PLAY GAME] [VIEW SCORES]等,这反过来呈现出不同的SKScene
我的问题是,当我尝试将{>> 1}}中的这些按钮的可见性设置为可见(从viewDidLoad
中隐藏)时,它们需要大约5秒才能显示。
UIViewController
所有代码都运行了,@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
正确显示,然后按钮出现约5-6秒后会发生什么?有什么我可以做的(强制更新)或者只是设计它或与它一起生活的情况?
这在模拟器和设备上都会发生。
查看输出日志,您可以清楚地看到在调用SKScene
后执行跳转到另一个线程。方法preloadTextureAtlases:withCompletionHandler:
在主线程上被调用,并且它应该在后台线程上预加载textureAtlas(s),但我认为completionHandler会回调到主线程上,这个假设是正确的还是我错了吗?
转到下面回答。
答案 0 :(得分:1)
关于preloadTextureAtlases:withCompletionHandler:在后台线程上调用completionHandler,我会假设用于预加载地图集的那个。我遇到的问题是我使用完成处理程序将NSNotification发送到我的viewController说"资产已加载,启动游戏"这个问题是"通知是在与它们发送的相同的线程中传递的。所以我的游戏也开始在后台线程中。因此,将UIButtons设置为可见的代码也在同一个后台线程上运行,因此它们的延迟会对可见或隐藏做出反应。