You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpriteView状态变更不暂停SKScene及场景替换失效问题咨询

这两个问题均为iOS 15及以上版本SpriteView的已知系统bug,不属于使用逻辑错误。以下是对应的可行修复方案:

1. isPaused属性不生效问题

问题原因

SpriteView(scene:isPaused:)的isPaused参数仅会在视图首次初始化时读取一次,后续状态变更不会被SpriteView监听,因此无法同步更新底层SKView、SKScene的暂停状态。

修复方案

不依赖SpriteView的isPaused参数,直接操作SKScene本身的isPaused属性即可,修改按钮点击逻辑:

Button("Paused: \(paused)" as String) {
    paused.toggle()
    scene.isPaused = paused
}

2. 更换SKScene不生效问题

问题原因

SpriteView会缓存首次传入的SKScene实例,后续即使传入新的实例,也不会触发底层场景的替换操作,旧场景会一直保留在内存中运行。

修复方案

给SpriteView添加一个与SKScene实例绑定的唯一id,当场景更换时id同步变化,触发SwiftUI强制销毁旧的SpriteView、创建新实例加载新场景:

SpriteView(scene: scene, isPaused: paused)
    .id(scene.name) // 可自行替换为任意和当前场景绑定的唯一标识
    .ignoresSafeArea()

如果追求更好的性能,不想每次切换场景都重建SpriteView,也可以自行封装UIViewRepresentable持有底层SKView的引用,手动调用presentScene(_:)方法更换场景。


内容的提问来源于stack exchange,提问作者clns

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 18:39:03