解除iOS 9上的viewController时的延迟

时间:2015-09-17 16:40:33

标签: ios swift uiviewcontroller sprite-kit

这是基于 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。

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中具有相同的名称和相同的类。

延迟消失了。有用。这很神奇,但它确实有效。