SKNode 的操作 运行 完成块没有被调用

SKNode's action run completion block does not get called

我有一个 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
}

我想强调的是,这总是首先起作用。在应用程序后台运行一段时间后,它开始失败。特别是如果我从复杂功能启动应用程序并尝试立即触发这些动画,那么就会发生这种冻结。

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

我终于解决了这个问题。事实证明,WatchKit 中的 WKInterfaceScene 也有一个 isPaused 属性,有时您需要将其转为 false。所以现在在我的 InterfaceController 的 willActivate 中,我也会检查它,如果它是 true,则将其转为 false。自从我做了这个改变后,我再也没有看到过一次打嗝、冻结或任何奇怪的事情。

我猜是结案了。我把这个留给可能面临这个问题的后代。