setFlashMode 导致 Apple 审阅者崩溃



我收到了来自 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
    }
}

最新更新