From 80db5a65ac7441a5bf3886033c9ec6e14201188d Mon Sep 17 00:00:00 2001 From: nelanelanela Date: Wed, 15 Oct 2014 18:00:04 +0100 Subject: [PATCH] Added a property to conditionally write to user library. --- .../UserInterfaceState.xcuserstate | Bin 43570 -> 43534 bytes camera/CameraManager.swift | 59 +++++++++++------- 2 files changed, 35 insertions(+), 24 deletions(-) diff --git a/camera.xcodeproj/project.xcworkspace/xcuserdata/nataliaterlecka.xcuserdatad/UserInterfaceState.xcuserstate b/camera.xcodeproj/project.xcworkspace/xcuserdata/nataliaterlecka.xcuserdatad/UserInterfaceState.xcuserstate index cc1c7122a8846d0cbc0d873413f92102ea93d3c2..f1314f9a398b5683cdb4c2432815e903a01f5f33 100644 GIT binary patch delta 5479 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 diff --git a/camera/CameraManager.swift b/camera/CameraManager.swift index 71dc58f..ab1c6aa 100644 --- a/camera/CameraManager.swift +++ b/camera/CameraManager.swift @@ -34,13 +34,16 @@ class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate { /// Capture sessioc to customize camera settings. var captureSession: AVCaptureSession? - /// Property to determine if the manager should show the error for the user. If you want to show the errors yourself set this to false. If you want to add custom error UI set showErrorBlock property + /// Property to determine if the manager should show the error for the user. If you want to show the errors yourself set this to false. If you want to add custom error UI set showErrorBlock property. Default value is true. var showErrorsToUsers = true /// A block creating UI to present error message to the user. var showErrorBlock:(erTitle: String, erMessage: String) -> Void = { (erTitle: String, erMessage: String) -> Void in UIAlertView(title: erTitle, message: erMessage, delegate: nil, cancelButtonTitle: "OK").show() } + + /// Property to determine if manager should write the resources to the phone library. Default value is true. + var writeFilesToPhoneLibrary = true /// The Bool property to determin if current device has front camera. var hasFrontCamera: Bool = { @@ -180,8 +183,6 @@ class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate { if let validStillImageOutput = self.stillImageOutput? { self.captureSession?.addOutput(validStillImageOutput) } - self.captureSession?.sessionPreset = AVCaptureSessionPresetPhoto - case .VideoOnly, .VideoWithMic: if (self.movieOutput == nil) { self._setupOutputs() @@ -197,8 +198,6 @@ class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate { self.captureSession?.addInput(validMic) } } - self.captureSession?.sessionPreset = AVCaptureSessionPresetMedium - } self.captureSession?.commitConfiguration() @@ -318,19 +317,21 @@ class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate { }) } else { let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(sample) - imageCompletition(UIImage(data: imageData)) if let weakSelf = self { - if let validLibrary = weakSelf.library? { - validLibrary.writeImageDataToSavedPhotosAlbum(imageData, metadata:nil, completionBlock: { - (picUrl, error) -> Void in - if (error? != nil) { - dispatch_async(dispatch_get_main_queue(), { - weakSelf._show("error", message: error.localizedDescription) - }) - } - }) + if weakSelf.writeFilesToPhoneLibrary { + if let validLibrary = weakSelf.library? { + validLibrary.writeImageDataToSavedPhotosAlbum(imageData, metadata:nil, completionBlock: { + (picUrl, error) -> Void in + if (error? != nil) { + dispatch_async(dispatch_get_main_queue(), { + weakSelf._show("error", message: error.localizedDescription) + }) + } + }) + } } } + imageCompletition(UIImage(data: imageData)) } }) } @@ -382,24 +383,33 @@ class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate { self._show("Unable to save video to the iPhone", message: error.localizedDescription) } else { if let validLibrary = self.library? { - validLibrary.writeVideoAtPathToSavedPhotosAlbum(outputFileURL, completionBlock: { (assetURL: NSURL?, error: NSError?) -> Void in - if (error != nil) { - self._show("Unable to save video to the iPhone.", message: error!.localizedDescription) - } else { - if let validCompletition = self.videoCompletition { + if self.writeFilesToPhoneLibrary { + validLibrary.writeVideoAtPathToSavedPhotosAlbum(outputFileURL, completionBlock: { (assetURL: NSURL?, error: NSError?) -> Void in + if (error != nil) { + self._show("Unable to save video to the iPhone.", message: error!.localizedDescription) + } else { if let validAssetURL = assetURL { - validCompletition(videoURL: validAssetURL) - self.videoCompletition = nil + self._executeVideoCompletitionWithURL(validAssetURL) } } - } - }) + }) + } else { + self._executeVideoCompletitionWithURL(outputFileURL) + } } } } // PRAGMA MARK - CameraManager() + private func _executeVideoCompletitionWithURL(url: NSURL) + { + if let validCompletition = self.videoCompletition { + validCompletition(videoURL: url) + self.videoCompletition = nil + } + } + @objc private func _orientationChanged() { if let validPreviewLayer = self.previewLayer? { @@ -430,6 +440,7 @@ class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate { dispatch_async(sessionQueue, { if let validCaptureSession = self.captureSession? { validCaptureSession.beginConfiguration() + validCaptureSession.sessionPreset = AVCaptureSessionPresetHigh self._addVideoInput() self._setupOutputs() self.cameraOutputMode = self.currentCameraOutputMode