检查 ARSession 是否为 运行 (ARKit)

Check if ARSession is running (ARKit)

我有一个 ARSCNView,可以根据情况偶尔暂停 session。有没有办法检查它的 session 是否是 运行?

像这样:

class myARView: ARSCNView {
    ...
    func foo() {

        if(session.running) {
            // do stuff
        }
    }
    ...
}

目前,似乎没有办法通过 ARSession 对象本身来检查会话是否 运行。但是,通过实施 ARSCNViewDelegate,您可以在会话中断或中断结束时收到通知。

实现您的目标的一种方法是设置一个布尔值并在您 pause/resume 会话时更新它,并在您的函数中检查它的值。

class ViewController: UIViewController, ARSCNViewDelegate {

    var isSessionRunning: Bool

    func foo() {
        if self.isSessionRunning {
            // do stuff
        }
    }

    func pauseSession() {
        self.sceneView.session.pause()
        self.isSessionRunning = false
    }

    func runSession() {
        let configuration = ARWorldTrackingConfiguration()
        sceneView.session.run(configuration)
        self.isSessionRunning = true
    }

    // ARSCNViewDelegate:
    func sessionWasInterrupted(_ session: ARSession) {
        self.isSessionRunning = false
    }

    func sessionInterruptionEnded(_ session: ARSession) {
        self.isSessionRunning = true
    }
}