首页 > 解决方案 > SKNode 的动作运行完成块不会被调用

问题描述

我有一个 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当应用程序移动到后台时它会暂停。我在willActivate我的 InterfaceController 中这样做:

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

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

标签: iosswiftsprite-kitwatchkitwatchos

解决方案


我可以回答我自己的问题吗?我想我可以吗?开始:

我终于解决了这个问题。事实证明,WKInterfaceSceneWatchKit 中的 ALSO 还具有您有时isPaused需要打开的属性。false所以现在在willActivate我的 InterfaceController 中,我也会检查它,false如果它是true. 自从我做出这个改变后,我再也没有看到任何打嗝、冻结或任何奇怪的东西了。

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


推荐阅读