在ARSession期间打开手电筒

时间:2018-12-07 19:21:12

标签: ios swift arkit flashlight

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

1 个答案:

答案 0 :(得分:0)

这是因为您要在会话运行前一段时间打开手电筒(手电筒)。 使用SceneKit,我尝试了这种方法,并且对我来说效果很好:

首先,将此变量添加到您的类中,以了解何时打开或关闭手电筒:

var isTorchOn = false

接下来,实现ARSCNViewDelegate的{​​{1}}方法,当会话准备就绪时,打开那里的手电筒。由于此委托是在每一帧执行的,因此您只需要在其中使用didRenderScene即可一次运行手电筒方法。

另外,请注意,我已经在isTorchOn方法中添加了isTorchOn标志以更新其值。

最终的简化代码:

turnTorch

如果使用SpriteKit,则可以遵循相同的方法。