11

我有一个ARSCNView正在运行的ARSession. 您可以肯定地暂停会话session.pause(),但这仍然有效,使会话继续运行。我尝试ARSCNView通过将其从超级视图中删除来解除分配。ARSCNView确实释放了,但之后ARSession仍在运行!你不能分配nilARSession任何一个。ARSessionDelegate我可以看到

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

仍然被调用!

完成后如何用 ARKit 彻底擦干净?

甚至可能吗?

4

2 回答 2

9

正式地说,现在,你不能。

但是,有一个解决方法:您制作ARSCNView一次性用品。

离开 AR 时,首先暂停ARSession. 然后解除分配整个ARSCNView层次结构并设置ARSCNViewnil良好的衡量标准。ARSCNView每当您需要返回 AR 时,重建整个层次结构并启动新会话。

var ARview: ARSCNView?

func punchTheClown() {

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

}

您的应用程序的其他非 AR 区域通常位于与您的ARSCNView. 我期待苹果提供一个实际的stopSession()功能,这样我们就可以同时不用打小丑了。

于 2018-12-25T06:00:35.070 回答
2

从文档

暂停时,会话不会跟踪设备运动或捕获场景图像,也不会与其委托对象协调或更新任何关联的 ARSCNView 或 ARSKView 对象

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

来源:.RunOptions ARKit Docs

于 2018-10-11T22:03:31.903 回答