3

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

像这样的东西:

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

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

1 回答 1

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
    }
}
于 2018-05-02T11:45:09.550 回答