检查 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
}
}
我有一个 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
}
}