我收到了来自 App Review 的崩溃日志,其中我的相机视图中将闪光灯模式设置为"关闭"的行导致崩溃。以下是代码片段:
let cameraInput = try AVCaptureDeviceInput(device: self.backCameraDevice)
do {
try cameraInput.device.lockForConfiguration()
if cameraInput.device.isExposureModeSupported(AVCaptureExposureMode.ContinuousAutoExposure) {
cameraInput.device.exposureMode = AVCaptureExposureMode.ContinuousAutoExposure
}
if cameraInput.device.isFocusModeSupported(AVCaptureFocusMode.ContinuousAutoFocus) {
cameraInput.device.focusMode = AVCaptureFocusMode.ContinuousAutoFocus
}
// CRASH HERE
self.backCameraDevice.flashMode = .Off
cameraInput.device.unlockForConfiguration()
} catch {
}
加载相机视图时设置闪光灯模式的正确方法是什么?
您可以使用 2 种方式
1 )
let avDevice = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
// check if the device has torch
if avDevice.hasTorch {
// lock your device for configuration
do {
let abv = try avDevice.lockForConfiguration()
} catch {
print("aaaa")
}
// check if your torchMode is on or off. If on turns it off otherwise turns it on
if avDevice.torchActive {
avDevice.torchMode = AVCaptureTorchMode.Off
} else {
// sets the torch intensity to 100%
do {
let abv = try avDevice.setTorchModeOnWithLevel(1.0)
} catch {
print("bbb")
}
// avDevice.setTorchModeOnWithLevel(1.0, error: nil)
}
// unlock your device
avDevice.unlockForConfiguration()
}
2 )
let device = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
if (device.hasTorch) {
do {
try device.lockForConfiguration()
if (device.torchMode == AVCaptureTorchMode.On) {
device.torchMode = AVCaptureTorchMode.Off
} else {
try device.setTorchModeOnWithLevel(1.0)
}
device.unlockForConfiguration()
} catch {
print(error)
}
}
您锁定/解锁 cameraInput.device,但您将闪光灯设置在 backCameraDevice 上。你应该做:
cameraInput.device.flashMode = .Off
我们只需要设置一种受支持的闪光模式。如果设备不支持 Flash 功能,则在以编程方式更改 Flash 模式时,应用将崩溃。
因此,首先,我们必须检查支持的闪光模式。
这是您将要使用AVCapturePhotoSettings时的代码片段。
let settings = AVCapturePhotoSettings()
if let flashModes = self.photoOutput?.supportedFlashModes {
if flashModes.contains(self.flashMode) {
settings.flashMode = self.flashMode
}
}