From 7da5d150ccdffc5055e09e6b6f447bb188b747be Mon Sep 17 00:00:00 2001 From: Interstellar2Anubhav Date: Mon, 30 Aug 2021 17:14:35 +0530 Subject: [PATCH 1/4] Added enumeration definition uWide in CameraDevice and updated code in the file --- Sources/CameraManager.swift | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/Sources/CameraManager.swift b/Sources/CameraManager.swift index a568cea..0eb0eba 100644 --- a/Sources/CameraManager.swift +++ b/Sources/CameraManager.swift @@ -21,7 +21,7 @@ public enum CameraState { } public enum CameraDevice { - case front, back + case front, back, uWide } public enum CameraFlashMode: Int { @@ -108,6 +108,7 @@ public enum CaptureError: Error { } /// Class for handling iDevices custom camera usage +@available(iOS 13.0, *) open class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate, UIGestureRecognizerDelegate { // MARK: - Public properties @@ -220,6 +221,12 @@ open class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate, UIGest return !frontDevices.isEmpty }() + /// Property to determine if current device has Ultra Wide camera. + open var hasuWideCamera: Bool = { + let frontDevices = AVCaptureDevice.default(.builtInUltraWideCamera, for: .video, position: .back) + return (frontDevices != nil) + }() + /// Property to determine if current device has flash. open var hasFlash: Bool = { let hasFlashDevices = AVCaptureDevice.videoDevices.filter { $0.hasFlash } @@ -351,6 +358,10 @@ open class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate, UIGest AVCaptureDevice.videoDevices.filter { $0.position == .back }.first }() + fileprivate lazy var uWideCameraDevice: AVCaptureDevice? = { + AVCaptureDevice.default(.builtInUltraWideCamera, for: .video, position: .back) + }() + fileprivate lazy var mic: AVCaptureDevice? = { AVCaptureDevice.default(for: AVMediaType.audio) }() @@ -871,6 +882,8 @@ open class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate, UIGest return device.hasFlash } else if device.position == .front, cameraDevice == .front { return device.hasFlash + } else if device.position == .back, cameraDevice == .uWide { + return device.hasFlash } } return false @@ -965,6 +978,8 @@ open class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate, UIGest device = backCameraDevice case .front: device = frontCameraDevice + case .uWide: + device = uWideCameraDevice } do { @@ -1012,6 +1027,8 @@ open class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate, UIGest device = backCameraDevice case .front: device = frontCameraDevice + case .uWide: + device = uWideCameraDevice } _changeExposureMode(mode: .continuousAutoExposure) @@ -1177,6 +1194,8 @@ open class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate, UIGest device = backCameraDevice case .front: device = frontCameraDevice + case .uWide: + device = uWideCameraDevice } if device?.exposureMode == mode { return @@ -1204,6 +1223,8 @@ open class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate, UIGest device = backCameraDevice case .front: device = frontCameraDevice + case .uWide: + device = uWideCameraDevice } guard let videoDevice = device else { @@ -1547,6 +1568,8 @@ open class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate, UIGest maxZoom = backCameraDevice.activeFormat.videoMaxZoomFactor } else if cameraDevice == .front, let frontCameraDevice = frontCameraDevice { maxZoom = frontCameraDevice.activeFormat.videoMaxZoomFactor + } else if cameraDevice == .uWide, let uWideCameraDevice = uWideCameraDevice { + maxZoom = uWideCameraDevice.activeFormat.videoMaxZoomFactor } maxZoomScale = maxZoom @@ -1815,6 +1838,11 @@ open class CameraManager: NSObject, AVCaptureFileOutputRecordingDelegate, UIGest !inputs.contains(validBackDevice) { validCaptureSession.addInput(validBackDevice) } + case .uWide: + if let validuWideDevice = _deviceInputFromDevice(uWideCameraDevice), + !inputs.contains(validuWideDevice) { + validCaptureSession.addInput(validuWideDevice) + } } } } @@ -2117,6 +2145,7 @@ extension PHPhotoLibrary { } } +@available(iOS 13.0, *) extension CameraManager: AVCaptureMetadataOutputObjectsDelegate { /** Called when a QR code is detected. From 56631bdd70ee7bb4a09c9ac32210de39852b75cd Mon Sep 17 00:00:00 2001 From: Interstellar2Anubhav Date: Mon, 30 Aug 2021 17:34:26 +0530 Subject: [PATCH 2/4] Added Lens Label for a switch from 1x to 0.5x in Main.storyboard --- Example App/Base.lproj/Main.storyboard | 55 +++++++++++++++----------- 1 file changed, 32 insertions(+), 23 deletions(-) diff --git a/Example App/Base.lproj/Main.storyboard b/Example App/Base.lproj/Main.storyboard index 74894ce..f8a12e2 100644 --- a/Example App/Base.lproj/Main.storyboard +++ b/Example App/Base.lproj/Main.storyboard @@ -1,9 +1,9 @@ - - + + - + @@ -16,32 +16,32 @@ - + - + - + - + - + - + - + - - + + + + @@ -167,7 +176,7 @@ - + @@ -178,13 +187,13 @@ - + - + -