From 60e95a75fa51d3770fb4dd87c4a54c7e4e730b1a Mon Sep 17 00:00:00 2001 From: Natalia Terlecka Date: Mon, 23 Mar 2015 09:31:28 +0000 Subject: [PATCH] Torch is set to correct state according to the current flash mode. --- camera/CameraManager.swift | 60 +++++++++++++++++++++++++++---------- camera/ViewController.swift | 1 - 2 files changed, 44 insertions(+), 17 deletions(-) diff --git a/camera/CameraManager.swift b/camera/CameraManager.swift index e05702f..22ca51b 100644 --- a/camera/CameraManager.swift +++ b/camera/CameraManager.swift @@ -120,22 +120,8 @@ public class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate { } set(newflashMode) { if newflashMode != _flashMode { - self.captureSession?.beginConfiguration() - let devices = AVCaptureDevice.devicesWithMediaType(AVMediaTypeVideo) - for device in devices { - let captureDevice = device as AVCaptureDevice - if (captureDevice.position == AVCaptureDevicePosition.Back) { - let avFlashMode = AVCaptureFlashMode(rawValue: newflashMode.rawValue) - if (captureDevice.isFlashModeSupported(avFlashMode!)) { - captureDevice.lockForConfiguration(nil) - captureDevice.flashMode = avFlashMode! - captureDevice.unlockForConfiguration() - } - } - } - self.captureSession?.commitConfiguration() - _flashMode = newflashMode + self._updateFlasMode(newflashMode) } } } @@ -408,11 +394,16 @@ public class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate { public func captureOutput(captureOutput: AVCaptureFileOutput!, didStartRecordingToOutputFileAtURL fileURL: NSURL!, fromConnections connections: [AnyObject]!) { - + self.captureSession?.beginConfiguration() + if self.flashMode != .Off { + self._updateTorch(self.flashMode) + } + self.captureSession?.commitConfiguration() } public func captureOutput(captureOutput: AVCaptureFileOutput!, didFinishRecordingToOutputFileAtURL outputFileURL: NSURL!, fromConnections connections: [AnyObject]!, error: NSError!) { + self._updateTorch(.Off) if (error != nil) { self._show(NSLocalizedString("Unable to save video to the iPhone", comment:""), message: error.localizedDescription) } else { @@ -436,6 +427,24 @@ public class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate { // PRAGMA MARK - CameraManager() + private func _updateTorch(flashMode: CameraFlashMode) + { + self.captureSession?.beginConfiguration() + let devices = AVCaptureDevice.devicesWithMediaType(AVMediaTypeVideo) + for device in devices { + let captureDevice = device as AVCaptureDevice + if (captureDevice.position == AVCaptureDevicePosition.Back) { + let avTorchMode = AVCaptureTorchMode(rawValue: flashMode.rawValue) + if (captureDevice.isTorchModeSupported(avTorchMode!)) { + captureDevice.lockForConfiguration(nil) + captureDevice.torchMode = avTorchMode! + captureDevice.unlockForConfiguration() + } + } + } + self.captureSession?.commitConfiguration() + } + private func _executeVideoCompletitionWithURL(url: NSURL, error: NSError?) { if let validCompletition = self.videoCompletition { @@ -541,6 +550,7 @@ public class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate { self.cameraOutputQuality = self._cameraOutputQuality self._setupPreviewLayer() validCaptureSession.commitConfiguration() + self._updateFlasMode(self.flashMode) validCaptureSession.startRunning() self._startFollowingDeviceOrientation() self.cameraIsSetup = true @@ -711,6 +721,24 @@ public class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate { } } + private func _updateFlasMode(flashMode: CameraFlashMode) + { + self.captureSession?.beginConfiguration() + let devices = AVCaptureDevice.devicesWithMediaType(AVMediaTypeVideo) + for device in devices { + let captureDevice = device as AVCaptureDevice + if (captureDevice.position == AVCaptureDevicePosition.Back) { + let avFlashMode = AVCaptureFlashMode(rawValue: flashMode.rawValue) + if (captureDevice.isFlashModeSupported(avFlashMode!)) { + captureDevice.lockForConfiguration(nil) + captureDevice.flashMode = avFlashMode! + captureDevice.unlockForConfiguration() + } + } + } + self.captureSession?.commitConfiguration() + } + private func _show(title: String, message: String) { if self.showErrorsToUsers { diff --git a/camera/ViewController.swift b/camera/ViewController.swift index afa58d0..2871a3f 100644 --- a/camera/ViewController.swift +++ b/camera/ViewController.swift @@ -62,7 +62,6 @@ class ViewController: UIViewController { private func addCameraToView() { self.cameraManager.addPreviewLayerToView(self.cameraView, newCameraOutputMode: CameraOutputMode.VideoWithMic) - self.cameraManager.cameraDevice = .Front CameraManager.sharedInstance.showErrorBlock = { (erTitle: String, erMessage: String) -> Void in UIAlertView(title: erTitle, message: erMessage, delegate: nil, cancelButtonTitle: "OK").show() }