如何使用 ARKit 打开 on/offf 相机闪光灯?

How to turn on/offf camera flash light with ARKit?

我正在使用 ARSCNView 来显示 AR 体验,它使用 3D SceneKit 内容增强相机视图。

ARSession 管理设备摄像头的共享对象,但在 ARSession 中我找不到闪光灯的任何选项。

有什么方法可以打开on/off相机闪光灯吗?

如何使用ARKit管理相机?

如何改变相机前后位置?

func toggleTorch(on: Bool) {
        guard let device = AVCaptureDevice.default(for: AVMediaType.video) 
        else {return}

        if device.hasTorch {
            do {
                try device.lockForConfiguration()

                if on == true {
                    device.torchMode = .on // set on
                } else {
                    device.torchMode = .off // set off
                }

                device.unlockForConfiguration()
            } catch {
                print("Torch could not be used")
            }
        } else {
            print("Torch is not available")
        }
    }

称之为

toggleTorch(on: true) 或 toggleTorch(on: false)

ref:使用 Swift

进行黑客攻击

另一个答案涉及手电筒,所以你的相机位置问题...

无法 select ARKit 相机;也就是说,ARKit select 是您的相机。

  • 当您使用世界跟踪时,ARKit 总是 select 背面的广角摄像头(不是如此配备的设备上的长焦或双摄像头)。
  • 当您使用面部跟踪时(iPhone 仅限 X),ARKit 始终使用前置 TrueDepth 摄像头。

如果您的手电筒在您打开后立即被 OS 关闭,您需要做的是;不要在启动 ARKit 会话后立即打开手电筒。一段时间后你应该打开手电筒。我在 viewDidLoad() 中启动 AR 会话,并尝试在 viewDidAppear() 中打开手电筒,但 OS 之后立即将其关闭。所以,我能够让它像这样工作;

override func viewDidAppear(_ animated: Bool) {  
         super.viewDidAppear(animated)  
         DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { [weak self] in            
              self?.toggleFlash() 
         }  
}