这是基于 swift 的 sprite kit 游戏。它在 iOS 8 上很好,但是在我开始在 iOS 9 设备上运行游戏后,我注意到了这种延迟。在我的游戏从菜单或其他一些视图返回到游戏场景之前,在其中一个视图中单击关闭按钮后会有一到两秒的延迟。
我用这段代码解雇了这些观点:
self.dismissViewControllerAnimated(true, completion: nil)
为了解决这个问题,我尝试在主调度队列中运行代码。它没有帮助。
dispatch_async(dispatch_get_main_queue()) {
self.dismissViewControllerAnimated(true, completion: nil)
}
检查我的游戏视图中是否有任何可能导致延迟但看起来不错的方法。无论如何,代码在iOS 8中没有问题。
任何人都有类似的问题,也许修好了吗?
编辑:意识到游戏场景已经开始执行,当我的视图被解除时,我可以看到动画已经在播放。例如,3秒动画已经在中途完成。
编辑2 :这个问题不会发生在带有iPhone 4s的iOS 9上,而是发生在更高版本的版本中,就我的iPhone 6而言。这可能是导致这种情况的新金属渲染。 4s没有金属。新的iOS补丁也没有得到修复。
编辑3 使用两个SKView时也会发生相同的延迟。为了摆脱UIControlView到SKView过渡延迟,我试图用另一个SKScene替换我的UIView,它的控件和UIControlView。即使我将转换时间设置为零秒,SKView被解除时也会出现延迟。这种时间滞后发生在两个方面,所以情况更糟。当前版本为iOS 9.2,Xcode 7.2。
答案 0 :(得分:8)
有点晚了,但也许会帮助别人。我有类似的问题(SpriteKit中的游戏 - 在解除ViewView与SKView呈现的MenuViewController时出现延迟),这有什么帮助:
当您展示全屏ViewController(带有菜单,设置等)时,将 modalPresentationStyle 设置为 .OverFullScreen 。
以下简要说明发生了什么(来自Apple View Controller Programming for iOS):
使用时显示视图控制器 UIModalPresentationFullScreen样式,UIKit通常会删除视图 转换动画后的基础视图控制器 完。您可以通过指定来阻止删除这些视图 而是UIModalPresentationOverFullScreen样式。你可能会用它 当呈现的视图控制器具有透明区域时的样式 让基础内容显示出来。
我认为这种延迟与恢复底层视图的过程有关,如果SKView出现场景可能会很复杂
答案 1 :(得分:0)
好。我遇到了同样的问题。
我的项目是使用Xcode的早期版本创建的。我创建了新的ViewController并调用了pushViewController()方法。延迟了2-3秒。
我删除了这个ViewController并创建了一个。新的在Interface Builder中具有相同的名称和相同的类。
延迟消失了。有用。这很神奇,但它确实有效。