Swift ARKit如何完全杀死ARSession?

时间:2018-10-11 21:40:59

标签: swift arkit arscnview

我有一个ARSCNView正在运行ARSession。您可以肯定session.pause()暂停会话,但是仍然有效,可以使会话继续运行。我尝试通过从其超级视图中删除ARSCNView来解除分配。 ARSCNView确实已解除分配,但之后ARSession仍在运行!!您也无法将nil分配给ARSession。我可以看到ARSessionDelegate

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

仍在被呼叫!

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

有可能吗?

2 个答案:

答案 0 :(得分:1)

目前,您还不能这样做。

但是,有一种解决方法:将ARSCNView设为一次性。

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

var ARview: ARSCNView?

func punchTheClown() {

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

}

应用程序的其他非AR区域通常位于与ARSCNView同级的单独视图层次结构中。我期待Apple提供实际的stopSession()功能,因此我们所有人都可以在此期间不再需要对TheClown打孔。

答案 1 :(得分:0)

来自文档

  

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

如果这不会引起问题,最好不要理会。我所知道的。这就像视频播放器一样。您可以随时 暂停 恢复

来源:.RunOptions ARKit Docs