From 0cbf1dbb61b0360def44df3ccbda24e1cc116132 Mon Sep 17 00:00:00 2001 From: nelanelanela Date: Mon, 13 Oct 2014 12:41:52 +0100 Subject: [PATCH] Custom show error block. --- .../UserInterfaceState.xcuserstate | Bin 41674 -> 41689 bytes camera/CameraManager.swift | 64 +++++++++++------- 2 files changed, 41 insertions(+), 23 deletions(-) diff --git a/camera.xcodeproj/project.xcworkspace/xcuserdata/nataliaterlecka.xcuserdatad/UserInterfaceState.xcuserstate b/camera.xcodeproj/project.xcworkspace/xcuserdata/nataliaterlecka.xcuserdatad/UserInterfaceState.xcuserstate index 7cab9523ec638033093003eb50304c3ce05cb4f4..0e6912d1a9b1624a04de33da9ef755e1aea7a012 100644 GIT binary patch delta 13416 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 diff --git a/camera/CameraManager.swift b/camera/CameraManager.swift index 83a1c08..c22afaf 100644 --- a/camera/CameraManager.swift +++ b/camera/CameraManager.swift @@ -14,7 +14,10 @@ private let _singletonSharedInstance = CameraManager() class CameraManager: NSObject { var captureSession: AVCaptureSession? - + var showErrorBlock:(erTitle: String, erMessage: String) -> Void = { (erTitle: String, erMessage: String) -> Void in + UIAlertView(title: erTitle, message: erMessage, delegate: nil, cancelButtonTitle: "OK").show() + } + private var sessionQueue: dispatch_queue_t = dispatch_queue_create("CameraSessionQueue", DISPATCH_QUEUE_SERIAL) private var frontCamera: AVCaptureInput? private var rearCamera: AVCaptureInput? @@ -27,6 +30,11 @@ class CameraManager: NSObject { return _singletonSharedInstance } + deinit { + self.stopCaptureSession() + self._stopFollowingDeviceOrientation() + } + func addPreeviewLayerToView(view: UIView) { if self.cameraIsSetup { @@ -37,25 +45,34 @@ class CameraManager: NSObject { }) } } + + func stopCaptureSession() + { + self.captureSession?.stopRunning() + } func capturePictureWithCompletition(imageCompletition: UIImage -> Void) { - dispatch_async(self.sessionQueue, { - if let validStillImageOutput = self.stillImageOutput? { - validStillImageOutput.captureStillImageAsynchronouslyFromConnection(validStillImageOutput.connectionWithMediaType(AVMediaTypeVideo), completionHandler: { [weak self] (sample: CMSampleBuffer!, error: NSError!) -> Void in - if (error? != nil) { - dispatch_async(dispatch_get_main_queue(), { - if let weakSelf = self { - weakSelf._show("error", message: error.localizedDescription) - } - }) - } else { - let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(sample) - imageCompletition(UIImage(data: imageData)) - } - }) - } - }) + if self.cameraIsSetup { + dispatch_async(self.sessionQueue, { + if let validStillImageOutput = self.stillImageOutput? { + validStillImageOutput.captureStillImageAsynchronouslyFromConnection(validStillImageOutput.connectionWithMediaType(AVMediaTypeVideo), completionHandler: { [weak self] (sample: CMSampleBuffer!, error: NSError!) -> Void in + if (error? != nil) { + dispatch_async(dispatch_get_main_queue(), { + if let weakSelf = self { + weakSelf._show("error", message: error.localizedDescription) + } + }) + } else { + let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(sample) + imageCompletition(UIImage(data: imageData)) + } + }) + } + }) + } else { + self._show("No capture session setup", message: "I can't take any picture") + } } func orientationChanged() @@ -101,6 +118,11 @@ class CameraManager: NSObject { { NSNotificationCenter.defaultCenter().addObserver(self, selector: "orientationChanged", name: UIDeviceOrientationDidChangeNotification, object: nil) } + + private func _stopFollowingDeviceOrientation() + { + NSNotificationCenter.defaultCenter().removeObserver(self, name: UIDeviceOrientationDidChangeNotification, object: nil) + } private func _addPreeviewLayerToView(view: UIView) { @@ -164,11 +186,7 @@ class CameraManager: NSObject { private func _show (title: String, message: String) { dispatch_async(dispatch_get_main_queue(), { () -> Void in - UIAlertView( - title: title, - message: message, - delegate: self, - cancelButtonTitle: "OK").show() - }) + self.showErrorBlock(erTitle: title, erMessage: message) + }) } }