From c1ecff48590912dfa88229ccc58e85b990a59b79 Mon Sep 17 00:00:00 2001 From: nelanelanela Date: Mon, 13 Oct 2014 14:53:19 +0100 Subject: [PATCH] Doc style comments. --- .../UserInterfaceState.xcuserstate | Bin 42979 -> 43963 bytes camera/CameraManager.swift | 45 +++++++++++++++--- 2 files changed, 39 insertions(+), 6 deletions(-) diff --git a/camera.xcodeproj/project.xcworkspace/xcuserdata/nataliaterlecka.xcuserdatad/UserInterfaceState.xcuserstate b/camera.xcodeproj/project.xcworkspace/xcuserdata/nataliaterlecka.xcuserdatad/UserInterfaceState.xcuserstate index 9a11c1eb4fa04b67ff3c0de5ca359f7a1b523ffa..ae167a42e7a2c2cfb655a664585201a976877aa1 100644 GIT binary patch delta 15992 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 delta 14878 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 MC-*(S{7$j^AB#NTQvd(} diff --git a/camera/CameraManager.swift b/camera/CameraManager.swift index 944a54c..eec5e01 100644 --- a/camera/CameraManager.swift +++ b/camera/CameraManager.swift @@ -9,9 +9,10 @@ import UIKit import AVFoundation +private let _singletonSharedInstance = CameraManager() + enum CameraDevice { - case Front - case Back + case Front, Back } enum CameraFlashMode: Int { @@ -20,15 +21,27 @@ enum CameraFlashMode: Int { case Auto } -private let _singletonSharedInstance = CameraManager() - +/// Class for handling iDevices custom camera usage class CameraManager: NSObject { - var hasFrontCamera = false - var captureSession: AVCaptureSession? + /// The Bool property to determin if current device has front camera. + var hasFrontCamera: Bool = { + let devices = AVCaptureDevice.devicesWithMediaType(AVMediaTypeVideo) + for device in devices { + let captureDevice = device as AVCaptureDevice + if (captureDevice.position == AVCaptureDevicePosition.Front) { + return true + } + } + return false + }() + + /// 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 change camera device between front and back. var cameraDevice: CameraDevice { get { return self.currentCameraDevice @@ -61,6 +74,8 @@ class CameraManager: NSObject { } } } + + /// Property to change camera flash mode. var flashMode: CameraFlashMode { get { return self.currentFlashMode @@ -87,6 +102,7 @@ class CameraManager: NSObject { } } + private var captureSession: AVCaptureSession? private var sessionQueue: dispatch_queue_t = dispatch_queue_create("CameraSessionQueue", DISPATCH_QUEUE_SERIAL) private var frontCamera: AVCaptureInput? private var rearCamera: AVCaptureInput? @@ -97,6 +113,7 @@ class CameraManager: NSObject { private var currentFlashMode = CameraFlashMode.Off private weak var embedingView: UIView? + /// CameraManager singleton instance to use the camera. class var sharedInstance: CameraManager { return _singletonSharedInstance } @@ -106,6 +123,11 @@ class CameraManager: NSObject { self._stopFollowingDeviceOrientation() } + /** + Inits a capture session and adds a preview layer to the given view. Preview layer bounds will automaticaly be set to match given view. + + :param: view The view you want to add the preview layer to + */ func addPreeviewLayerToView(view: UIView) { if let validEmbedingView = self.embedingView? { @@ -122,11 +144,17 @@ class CameraManager: NSObject { } } + /** + Stops running capture session but all setup devices, inputs and outputs stay for further reuse. + */ func stopCaptureSession() { self.captureSession?.stopRunning() } + /** + Stops running capture session and removes all setup devices, inputs and outputs. + */ func stopAndRemoveCaptureSession() { self.stopCaptureSession() @@ -139,6 +167,11 @@ class CameraManager: NSObject { self.stillImageOutput = nil } + /** + Captures still image from currently running capture session. + + :param: imageCompletition Completition block containing the captured UIImage + */ func capturePictureWithCompletition(imageCompletition: UIImage -> Void) { if self.cameraIsSetup {