呈现 SKScene 后取消隐藏 UIButtons 时延迟?
Posted
技术标签:
【中文标题】呈现 SKScene 后取消隐藏 UIButtons 时延迟?【英文标题】:Delay when unhiding UIButtons after presenting SKScene? 【发布时间】: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 作为答案并接受它。 【参考方案1】:关于 preloadTextureAtlases:withCompletionHandler:completionHandler 在后台线程上调用,我会假设用于预加载图集的同一个。我遇到的问题是我正在使用完成处理程序向我的 viewController 发送一个 NSNotification 说“资产已加载,开始游戏”这个问题是“通知在发送它们的同一线程中传递from" 所以我的游戏也从后台线程开始。因此,将 UIButtons 设置为可见的代码也在同一个后台线程上运行,因此它们对变为可见或隐藏的反应会有延迟。
【讨论】:
以上是关于呈现 SKScene 后取消隐藏 UIButtons 时延迟?的主要内容,如果未能解决你的问题,请参考以下文章
SKScene touchesEnded 第二次呈现场景时未调用
如何从 SKScene 呈现 UIAlertController