【发布时间】:2014-03-20 13:12:51
【问题描述】:
我遇到了一个我没有预料到的延迟/暂停,到目前为止的原因让我摸不着头脑。我有一个简单的游戏设置,其中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: 在主线程上调用,它应该在后台线程上预加载textureAtlas(s),但我的印象是completionHandler 会回调到主线程上,这个假设是正确的还是我错了吗?
EDIT_002:
移到下面回答。
【问题讨论】:
-
运行在主线程上显示按钮的代码。
-
我会对此进行调查并回复您,感谢您的指点。
-
您的 EDIT 是一个很好的观察,如果您找到了解决方案,请告诉我,谢谢
-
对问题进行了编辑以显示导致问题的原因...,感谢 Akshat 最初的评论让我走上了正轨,非常感谢。
-
@fuzzygoat 请发布 EDIT_002 作为答案并接受它。
标签: ios objective-c uiviewcontroller uibutton sprite-kit