2016-06-09 79 views
1

我从App Review收到了一个崩溃日志,其中我的相机视图中将闪光模式设置为“Off”的行导致崩溃。这里是代码片段:setFlashMode会导致Apple审阅者崩溃

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

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

+0

你在'catch'中做了什么'try'?您是否在iPad上测试过您的应用程序(即没有闪光灯的设备)? – Paulw11

+0

哦,你提出一个好点。也许我应该像在其他设置中一样在其中添加支票。用一个例子更新我的问题。 – cb428

+0

这听起来像是一个好的第一步;你应该检查'isFlashModeSupported'和/或'hasFlash' – Paulw11

回答

-1

可以使用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) 
     } 
    } 
0

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

cameraInput.device.flashMode = .Off