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

时间:2014-03-20 13:12:51

标签: ios objective-c uiviewcontroller uibutton sprite-kit

我遇到了一个我没想到的延迟/暂停,到目前为止我的理由让我摸不着头脑。我有一个简单的游戏设置,其中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会回调到主线程上,这个假设是正确的还是我错了吗?

EDIT_002:

转到下面回答。

1 个答案:

答案 0 :(得分:1)

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