I have an ARSCNView
running an ARSession
. You can pause the session with session.pause()
sure, but that still in effect, leaves the session running. I have tried deallocating the ARSCNView
by removing it from its superview. The ARSCNView
indeed deallocates but the ARSession
is still running afterwards!! You can't assign nil
to ARSession
either. I can see the ARSessionDelegate
's
func session(_ session: ARSession, didUpdate frame: ARFrame)
is still being called!
How do you completely wipe the slate clean with ARKit once you have finished with it?
Is it even possible?
Officially, right now, you can't.
However, there is a work-around: you make the ARSCNView
disposable.
On leaving AR, first pause the ARSession
. Then deallocate the entire ARSCNView
hierarchy & set ARSCNView
to nil
for good measure. Rebuild the entire ARSCNView
hierarchy and start a new session whenever you need to go back to AR.
var ARview: ARSCNView?
func punchTheClown() {
ARView?.session.pause()
ARView?.removeFromSuperview()
ARView = nil
}
Other non-AR areas of your app would typically be in a separate view hierarchy at the same sibling level as your ARSCNView
. I look forward to Apple providing an actual stopSession()
function, so we can all stop having to punchTheClown in the meantime.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With