在ARSession期间如何打开手电筒?
在关闭以手电筒开始的会话后,标准代码不起作用。
初始化ARSession:
let configuration = ARWorldTrackingConfiguration()
self.sceneView.session.run(configuration, options: [.removeExistingAnchors])
打开/关闭手电筒的功能:
private func turnTorch(enabled: Bool) {
guard let device = AVCaptureDevice.default(for: AVMediaType.video) else {
return // Cant initiate avcapturedevice error
}
if device.hasTorch {
do {
try device.lockForConfiguration()
if enabled {
device.torchMode = .on
} else {
device.torchMode = .off
}
device.unlockForConfiguration()
} catch {
return //Torch could not be used, lock for configuration failed
}
} else {
return // Torch not available error
}
}
答案 0 :(得分:0)
这是因为您要在会话运行前一段时间打开手电筒(手电筒)。 使用SceneKit,我尝试了这种方法,并且对我来说效果很好:
首先,将此变量添加到您的类中,以了解何时打开或关闭手电筒:
var isTorchOn = false
接下来,实现ARSCNViewDelegate
的{{1}}方法,当会话准备就绪时,打开那里的手电筒。由于此委托是在每一帧执行的,因此您只需要在其中使用didRenderScene
即可一次运行手电筒方法。
另外,请注意,我已经在isTorchOn
方法中添加了isTorchOn
标志以更新其值。
最终的简化代码:
turnTorch
如果使用SpriteKit,则可以遵循相同的方法。