SKNode的动作运行完成块不会被调用

时间:2018-05-25 11:27:58

标签: ios swift sprite-kit watchkit watch-os

我有一个watchOS 4应用程序,它在UI上显示SpriteKit动画(SKActions)。一切都在模拟器和设备上工作很好,第一次,然后在应用程序在后台的一段时间后,它启动,动画只是冻结和完成块为最持久的动画不被调用。知道可能是什么问题吗?

这是我运行我的动作的方式,调用者正在等待completion关闭以隐藏spritekit场景:

private func runActions(with icon: SKShapeNode?, completion: @escaping () -> Void) {
    if let icon = icon, let scaleAction = scaleAction, let bg = background {
        self.label?.run(fadeInOutAction)
        icon.run(scaleAction)
        icon.run(fadeInOutAction)
        bg.run(backgroundAction, completion: completion)
    } else {
        completion()
    }
}

是的,我知道当应用移动到后台时,SKScene会暂停。我在我的InterfaceController的willActivate中执行此操作:

if scene.scene?.isPaused == true {
    scene.scene?.isPaused = false
}

我想强调一下,这首先是有效的。在应用程序已经背景一段时间后,它开始失败。特别是如果我从复杂化启动应用程序并尝试立即触发这些动画,那么这种冻结就会发生。

1 个答案:

答案 0 :(得分:1)

我可以回答我自己的问题吗?我想我可以吗?这是:

我终于解决了这个问题。事实证明,WatchKit中的WKInterfaceScene还有isPaused属性,您有时需要转换false。所以现在在我的InterfaceController的willActivate中,如果是false,我也会检查并转换它true。由于我做了这个改变,我没有看到一个打嗝,冻结或任何奇怪的东西。

案件已经结束,我想。我把它留给这些可能面临这个问题的后代。