setFlashMode导致Apple审阅者崩溃

时间:2016-06-09 04:20:11

标签: ios swift avfoundation

我收到了来自App Review的崩溃日志,其中我的相机视图中的行将闪光模式设置为"关闭"导致崩溃。以下是代码段:

        //find the max 
        double max = numbers.Max();

        //nomarlize the numbers
        for (int i = 0; i < numbers.Length; i++)
        {
            numbers[i] = numbers[i] / max;
        }

加载相机视图时设置闪光模式的正确方法是什么?

3 个答案:

答案 0 :(得分:0)

您锁定/解锁cameraInput.device,但在backCameraDevice上设置了闪光灯。 你应该这样做:

cameraInput.device.flashMode = .Off

答案 1 :(得分:0)

我们只需要设置一种支持的闪光模式。 如果设备不支持Flash功能,则以编程方式更改Flash模式时,应用程序将崩溃。

因此,如果必须先检查支持的闪光灯模式。

当您要使用AVCapturePhotoSettings时,这是一个代码段。

let settings = AVCapturePhotoSettings()
if let flashModes = self.photoOutput?.supportedFlashModes {
    if flashModes.contains(self.flashMode) {
        settings.flashMode = self.flashMode
    }
}

答案 2 :(得分:-1)

你可以使用双向

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)
        }
    }