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
。自从我做了这个改变后,我再也没有看到过一次打嗝、冻结或任何奇怪的事情。
我猜是结案了。我把这个留给可能面临这个问题的后代。
我有一个 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
。自从我做了这个改变后,我再也没有看到过一次打嗝、冻结或任何奇怪的事情。
我猜是结案了。我把这个留给可能面临这个问题的后代。