2016-12-13 12 views
1

私はカメラアプリケーションで作業しています。私はボタンを使用して、必要に応じてフラッシュモードをオン/オフにしています。この方法は、静止画のキャプチャには完全に機能し、ビデオモードでは機能しません。以下は私のコードです。トーチモードに使用TIASwift 3.0でビデオを録画中にFlashが動作しない

class func setFlashMode(_ flashMode: AVCaptureFlashMode, for device: AVCaptureDevice) { 
    if device.hasFlash && device.isFlashModeSupported(flashMode) { 
     do { 
      try device.lockForConfiguration() 
      device.flashMode = flashMode 
      device.unlockForConfiguration() 
     } 
     catch 
     { 
      print("Error:-\(error)") 
     } 
    } 
} 

フラッシュボタンアクション

@IBAction func flashButtonClicked(_ sender: UIButton) 
{ 
sender.isSelected = !sender.isSelected 
    if !(sender.isSelected) 
    { 
     sender.setTitle(NSLocalizedString("OFF", comment: ""), for: UIControlState.normal) 
     CameraVC.setFlashMode(AVCaptureFlashMode.off, for: self.videoDeviceInput.device) 
    } 
    else 
    { 
     sender.setTitle(NSLocalizedString("ON", comment: ""), for: UIControlState.normal) 
     CameraVC.setFlashMode(AVCaptureFlashMode.on, for: self.videoDeviceInput.device) 
    } 
} 

動画ボタンアクション

@IBAction func videoButtonClicked(_ sender: UIButton) 
{  
    self.sessionQueue.async { 
     if !self.movieFileOutput.isRecording 
     { 
      if UIDevice.current.isMultitaskingSupported 
      { 
       self.backGroundRecordingID = UIApplication.shared.beginBackgroundTask(expirationHandler: nil) 
      } 

      let connection = self.movieFileOutput.connection(withMediaType: AVMediaTypeVideo) 
      let deviceOrientation = UIDevice.current.orientation 
      if UIDeviceOrientationIsPortrait(deviceOrientation) || UIDeviceOrientationIsLandscape(deviceOrientation) 
      { 
       connection?.videoOrientation = self.videoOrientation() 
      } 

      // Turning ON flash for video recording 
      CameraVC.setFlashMode(AVCaptureFlashMode.on, for: self.videoDeviceInput.device) 

      let mediaDirectoryURL = SBMediaInfo.mediaDirectoryPath() 
      //Unique file name 
      let fileName = UIDevice.current.identifierForVendor!.uuidString 
      // Start recording to a temporary file. 
      let outputFilePath = "\(mediaDirectoryURL.path)/\(fileName).mov" 
      self.movieFileOutput.startRecording(toOutputFileURL: URL(fileURLWithPath: outputFilePath), recordingDelegate: self) 
      print("\(outputFilePath)") 
     } 
     else 
     { 
      self.movieFileOutput.stopRecording() 
     } 
     sender.isEnabled = true 
    } 
} 

答えて

1

、それが完全に働きました。

class func setTorchMode(_ torchMode: AVCaptureTorchMode, for device: AVCaptureDevice) { 
    if device.isTorchModeSupported(torchMode) && device.torchMode != torchMode { 
     do 
     { 
      try device.lockForConfiguration() 
       device.torchMode = torchMode 
       device.unlockForConfiguration() 
     } 
     catch { 
      print("Error:-\(error)") 
     } 
    } 
} 

そしてisTorchOnはブール値

ある

if self.isTorchOn == true 
      { 
       CameraVC.setTorchMode(AVCaptureTorchMode.on, for: self.videoDeviceInput.device) 
      } 
      else 
      { 
       CameraVC.setTorchMode(AVCaptureTorchMode.off, for: self.videoDeviceInput.device) 
      } 

としてこれを使用します

関連する問題