检查 ARSession 是否正在运行 (ARKit)

Muh*_*tih 3 ios scenekit swift arkit arscnview

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

像这样的东西:

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

        if(session.running) {
            // do stuff
        }
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

Mo *_*ani 5

目前,似乎没有办法通过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
    }
}
Run Code Online (Sandbox Code Playgroud)