Swift ARKit如何完全杀死ARSession?

Geo*_*f H 4 swift arkit arscnview

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

func session(_ session: ARSession, didUpdate frame: ARFrame) 
Run Code Online (Sandbox Code Playgroud)

仍在被叫!

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

可能吗?

Geo*_*f H 6

正式而言,现在还不能。

但是,有一种解决方法:将ARSCNView一次性用品制成。

离开AR时,请先暂停ARSession。然后解除分配整个ARSCNView层次结构和集ARSCNViewnil的好措施。重建整个ARSCNView层次结构,并在需要返回到AR时开始新的会话。

var ARview: ARSCNView?

func punchTheClown() {

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

}
Run Code Online (Sandbox Code Playgroud)

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

  • RealityKit 的 ARView() 也存在同样的问题。它对我也不起作用,根本没有找到从内存中释放它的方法。 (3认同)
  • 这对我不起作用。即使我将场景视图对象设置为零后,我也可以看到会话处于活动状态。还有其他建议吗? (2认同)