Swift ARKit 你如何完全杀死一个ARSession?

Swift ARKit How do you fully kill an ARSession?

我有一个 ARSCNView 运行 一个 ARSession。您可以使用 session.pause() 暂停会话,但仍然有效,离开会话 运行。我已经尝试通过将 ARSCNView 从其超级视图中删除来解除分配它。 ARSCNView 确实解除了分配,但 ARSession 之后仍然是 运行!!您也不能将 nil 分配给 ARSession。我可以看到 ARSessionDelegate

func session(_ session: ARSession, didUpdate frame: ARFrame) 

仍在通话中!

你如何在使用完 ARKit 后彻底擦干净石板?

有可能吗?

来自文档

While paused, the session doesn't track device motion or capture scene imagery, nor does it coordinate with its delegate object or update any associated ARSCNView or ARSKView object

如果没有引起问题,最好不要管。据我所知。这就像一个视频播放器。您可以随时暂停恢复

此处来源:.RunOptions ARKit Docs

正式的,现在,你不能。

但是,有一个变通方法:将 ARSCNView 设为一次性。

离开 AR 时,先暂停 ARSession。然后取消分配整个 ARSCNView 层次结构并将 ARSCNView 设置为 nil 以取得良好的效果。重建整个 ARSCNView 层次结构并在需要返回 AR 时启动新会话。

var ARview: ARSCNView?

func punchTheClown() {

    ARView?.session.pause()
    ARView?.removeFromSuperview()
    ARView = nil

}

您应用的其他非 AR 区域通常位于与您的 ARSCNView 相同兄弟级的单独视图层次结构中。我期待 Apple 提供实际的 stopSession() 功能,这样我们就可以不用再打小丑了。