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

像这样:

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

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

最佳答案

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

实现目标的一种方法是设置一个布尔值,并在您暂停/恢复会话时对其进行更新,并在函数中检查其值。

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
    }
}

10-06 02:55