diff --git a/camera.xcodeproj/project.xcworkspace/xcuserdata/nataliaterlecka.xcuserdatad/UserInterfaceState.xcuserstate b/camera.xcodeproj/project.xcworkspace/xcuserdata/nataliaterlecka.xcuserdatad/UserInterfaceState.xcuserstate index eef13d5..69b6270 100644 Binary files a/camera.xcodeproj/project.xcworkspace/xcuserdata/nataliaterlecka.xcuserdatad/UserInterfaceState.xcuserstate and b/camera.xcodeproj/project.xcworkspace/xcuserdata/nataliaterlecka.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/camera/CameraManager.swift b/camera/CameraManager.swift index 8ef7fc0..c57c8f5 100644 --- a/camera/CameraManager.swift +++ b/camera/CameraManager.swift @@ -68,7 +68,14 @@ public class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate { } } } - + + /// The Bool property to determine if the camera is ready to use. + public var cameraIsReady: Bool { + get { + return cameraIsSetup + } + } + /// The Bool property to determine if current device has front camera. public var hasFrontCamera: Bool = { let devices = AVCaptureDevice.devicesWithMediaType(AVMediaTypeVideo) @@ -79,7 +86,7 @@ public class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate { } } return false - }() + }() /// The Bool property to determine if current device has flash. public var hasFlash: Bool = { @@ -96,8 +103,10 @@ public class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate { /// Property to change camera device between front and back. public var cameraDevice = CameraDevice.Back { didSet { - if cameraDevice != oldValue { - _updateCameraDevice(cameraDevice) + if cameraIsSetup { + if cameraDevice != oldValue { + _updateCameraDevice(cameraDevice) + } } } } @@ -105,8 +114,10 @@ public class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate { /// Property to change camera flash mode. public var flashMode = CameraFlashMode.Off { didSet { - if flashMode != oldValue { - _updateFlasMode(flashMode) + if cameraIsSetup { + if flashMode != oldValue { + _updateFlasMode(flashMode) + } } } } @@ -114,8 +125,10 @@ public class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate { /// Property to change camera output quality. public var cameraOutputQuality = CameraOutputQuality.High { didSet { - if cameraOutputQuality != oldValue { - _updateCameraQualityMode(cameraOutputQuality) + if cameraIsSetup { + if cameraOutputQuality != oldValue { + _updateCameraQualityMode(cameraOutputQuality) + } } } } @@ -123,8 +136,10 @@ public class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate { /// Property to change camera output. public var cameraOutputMode = CameraOutputMode.StillImage { didSet { - if cameraOutputMode != oldValue { - _setupOutputMode(cameraOutputMode, oldCameraOutputMode: oldValue) + if cameraIsSetup { + if cameraOutputMode != oldValue { + _setupOutputMode(cameraOutputMode, oldCameraOutputMode: oldValue) + } } } } @@ -183,6 +198,7 @@ public class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate { :param: view The view you want to add the preview layer to :param: cameraOutputMode The mode you want capturesession to run image / video / video and microphone + :param: completition Optional completition block :returns: Current state of the camera: Ready / AccessDenied / NoDeviceFound / NotDetermined. */ @@ -190,6 +206,9 @@ public class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate { return addPreviewLayerToView(view, newCameraOutputMode: cameraOutputMode) } public func addPreviewLayerToView(view: UIView, newCameraOutputMode: CameraOutputMode) -> CameraState { + return addPreviewLayerToView(view, newCameraOutputMode: cameraOutputMode, completition: nil) + } + public func addPreviewLayerToView(view: UIView, newCameraOutputMode: CameraOutputMode, completition: (Void -> Void)?) -> CameraState { if _canLoadCamera() { if let _ = embedingView { if let validPreviewLayer = previewLayer { @@ -199,10 +218,16 @@ public class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate { if cameraIsSetup { _addPreviewLayerToView(view) cameraOutputMode = newCameraOutputMode + if let validCompletition = completition { + validCompletition() + } } else { _setupCamera({ Void -> Void in self._addPreviewLayerToView(view) self.cameraOutputMode = newCameraOutputMode + if let validCompletition = completition { + validCompletition() + } }) } }