2016-12-13 10 views
1

카메라 응용 프로그램에서 작업 중입니다. 필자는 필요할 때 버튼을 사용하여 플래시 모드를 켜고 끕니다. 이 방법은 정지 이미지 캡처에 완벽하게 작동하며 비디오 모드에서는 작동하지 않습니다. 아래 코드는 도움이됩니다. TIA스위프트 3.0에서 비디오를 녹화하는 동안 플래시가 작동하지 않습니다.

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

로 사용