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

时间:2017-10-30 04:43:49

标签: ios swift arkit

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

管理设备相机的

ARSession共享对象,但在ARSession我找不到闪光灯的任何选项。

有没有办法打开/关闭相机闪光灯?

如何使用ARKit管理相机?

如何正面和背面改变相机位置?

3 个答案:

答案 0 :(得分:7)

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:false)的

toggleTorch(on:true)

参考:使用Swift进行黑客攻击

答案 1 :(得分:2)

另一个答案涵盖火炬,以及你的相机位置问题......

无法为ARKit选择相机;也就是说,ARKit会为你选择相机。

  • 当您使用世界追踪时,ARKit始终选择背面的广角相机(不是配备的设备上的远摄或双相机)。
  • 当您使用面部追踪(仅限iPhone X)时,ARKit始终使用正面的TrueDepth相机。

答案 2 :(得分:1)

如果割炬在打开后立即被操作系统关闭,您需要做的是;开始ARKit会话后不要立即打开割炬。一段时间后,您应该打开割炬。我在viewDidLoad()中启动了AR会话,并尝试在viewDidAppear()中打开了割炬,但操作系统随后立即将其关闭。因此,我能够使它像这样工作;

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