From c1d6fd5abf1bd24303c8894743b8feb2e73c4574 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Torra=CC=83o?= Date: Fri, 29 Jan 2016 18:21:02 +0000 Subject: [PATCH] Saves still images with Zoom --- camera/CameraManager.swift | 66 ++++++++++++++++++++++++-------------- 1 file changed, 42 insertions(+), 24 deletions(-) diff --git a/camera/CameraManager.swift b/camera/CameraManager.swift index 72c9c84..8e34a14 100644 --- a/camera/CameraManager.swift +++ b/camera/CameraManager.swift @@ -142,6 +142,7 @@ public class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate, UIGe if cameraIsSetup { if cameraOutputMode != oldValue { _setupOutputMode(cameraOutputMode, oldCameraOutputMode: oldValue) + _setupMaxZoom() } } } @@ -191,11 +192,14 @@ public class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate, UIGe } catch { } } return NSURL(string: tempPath)! - }() + }() + + private var pinchToZoom: UIPinchGestureRecognizer? private var zoomScale: CGFloat = 1.0 private var beginZoomScale: CGFloat = 1.0 - + private var maxZoomFactor: CGFloat = 1.0 + // MARK: - CameraManager /** @@ -345,7 +349,7 @@ public class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate, UIGe } imageCompletition(UIImage(data: imageData), nil) } - }) + }) }) } else { _show(NSLocalizedString("Capture session output mode video", comment:""), message: NSLocalizedString("I can't take any picture", comment:"")) @@ -456,10 +460,9 @@ public class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate, UIGe var allTouchesAreOnThePreviewLayer = true let numTouches = pinchRecognizer.numberOfTouches(); - var i: Int - for i = 0; i < numTouches; ++i { - let location: CGPoint = pinchRecognizer.locationOfTouch(i, inView: embedingView) + for index in 0.. Void in guard let _ = self.previewLayer else { return @@ -668,7 +666,20 @@ public class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate, UIGe return .NoDeviceFound } } - + + private func _setupMaxZoom() { + if cameraDevice == .Back { + if let maxZoom = backCameraDevice?.activeFormat.videoMaxZoomFactor { + maxZoomFactor = maxZoom + } + } + else { + if let maxZoom = frontCameraDevice?.activeFormat.videoMaxZoomFactor { + maxZoomFactor = maxZoom + } + } + } + private func _setupOutputMode(newCameraOutputMode: CameraOutputMode, oldCameraOutputMode: CameraOutputMode?) { captureSession?.beginConfiguration() @@ -678,6 +689,7 @@ public class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate, UIGe case .StillImage: if let validStillImageOutput = stillImageOutput { captureSession?.removeOutput(validStillImageOutput) + _removePinchToZoom() } case .VideoOnly, .VideoWithMic: if let validMovieOutput = movieOutput { @@ -697,6 +709,7 @@ public class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate, UIGe } if let validStillImageOutput = stillImageOutput { captureSession?.addOutput(validStillImageOutput) + _addPinchToZoom() } case .VideoOnly, .VideoWithMic: captureSession?.addOutput(_getMovieOutput()) @@ -847,12 +860,17 @@ public class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate, UIGe } } - private func _setupZoom() { - embedingView?.userInteractionEnabled = true - let pinchSelector: Selector = "_handlePinchGesture:" - let pinchToZoom: UIPinchGestureRecognizer = UIPinchGestureRecognizer(target: self, action: pinchSelector) - pinchToZoom.delegate = self - embedingView?.addGestureRecognizer(pinchToZoom) + private func _setupPinchToZoom() { + pinchToZoom = UIPinchGestureRecognizer(target: self, action: "_handlePinchGesture:") + pinchToZoom!.delegate = self + } + + private func _addPinchToZoom() { + embedingView?.addGestureRecognizer(pinchToZoom!) + } + + private func _removePinchToZoom() { + embedingView?.removeGestureRecognizer(pinchToZoom!) } private func _applyZoomScale() {