用前置摄像头打开灯/手电筒

时间:2017-06-08 08:36:37

标签: ios swift camera avcapturesession avcapturedevice

我知道如何打开/关闭后置摄像头的闪光灯。我知道如何切换前/后相机。但我不知道如何独立于有源相机打开/关闭闪光灯。

我的意思是:如果有源相机是前置相机,当我打开闪光灯时,它会冻结。当我把它关掉时,它会解冻。

到目前为止我的代码:

var back_cam:AVCaptureDevice?
for device in devices{
    if (device as AnyObject).hasMediaType(AVMediaTypeVideo) && (device as AnyObject).position == .back{
        back_cam=device as? AVCaptureDevice
    }
}

guard let cam=back_cam else {
    print("no back cam?")
    return
}

if cam.hasTorch{
    do{
        try cam.lockForConfiguration()
            if cam.torchMode == .on{
                cam.torchMode = .off
            }else{
                do{
                    try cam.setTorchModeOnWithLevel(1)
                }catch{
                    print(error)
                }
            }
            cam.unlockForConfiguration()
        }catch{
            print(error)
        }
    }
}

修改

如果我不清楚,我想保持灯亮,无论有源相机是后置灯还是后置灯。

1 个答案:

答案 0 :(得分:0)

在打开/关闭之前,您需要检查设备是否支持手电筒模式。

根据Apple documentation

var torchMode: AVCaptureTorchMode { get set }
  

在设置此属性的值之前,请调用   isTorchModeSupported(_ :)方法,以确保设备支持   所需的模式。将设备设置为不支持的割炬模式   提出例外。

此外,当您切换到前置摄像头时,默认行为是关闭手电筒模式。将其与iPhone / iPad上的默认相机应用进行比较。