我有一个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
}
我想强调一下,这首先是有效的。在应用程序已经背景一段时间后,它开始失败。特别是如果我从复杂化启动应用程序并尝试立即触发这些动画,那么这种冻结就会发生。
答案 0 :(得分:1)
我可以回答我自己的问题吗?我想我可以吗?这是:
我终于解决了这个问题。事实证明,WatchKit中的WKInterfaceScene
还有isPaused
属性,您有时需要转换false
。所以现在在我的InterfaceController的willActivate
中,如果是false
,我也会检查并转换它true
。由于我做了这个改变,我没有看到一个打嗝,冻结或任何奇怪的东西。
案件已经结束,我想。我把它留给这些可能面临这个问题的后代。