From e66487cabf85f2bfc6ba9df24a53955f48501677 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Fri, 2 Jan 2026 16:01:43 -0600 Subject: [PATCH] Fix preview to show actual capture aspect ratio Changes: 1. Preview layer now uses .resizeAspect instead of .resizeAspectFill - Shows exactly what will be in the captured photo - No cropping - what you see is what you get - Ring light naturally fills any letterbox areas 2. Session preset changed from .high to .photo - Optimized for photo capture - Consistent 4:3 aspect ratio - Better quality for selfies This ensures the preview accurately represents the final photo, eliminating surprise cropping in captured images. --- SelfieRingLight/Features/Camera/CameraPreview.swift | 4 +++- SelfieRingLight/Features/Camera/CameraViewModel.swift | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/SelfieRingLight/Features/Camera/CameraPreview.swift b/SelfieRingLight/Features/Camera/CameraPreview.swift index a762fb6..07e7d08 100644 --- a/SelfieRingLight/Features/Camera/CameraPreview.swift +++ b/SelfieRingLight/Features/Camera/CameraPreview.swift @@ -128,7 +128,9 @@ class CameraPreviewUIView: UIView { if let layer = self.layer as? AVCaptureVideoPreviewLayer { layer.session = session - layer.videoGravity = .resizeAspectFill + // Use .resizeAspect to show exactly what will be captured + // The ring light fills any letterbox areas naturally + layer.videoGravity = .resizeAspect previewLayer = layer viewModel.previewLayer = layer diff --git a/SelfieRingLight/Features/Camera/CameraViewModel.swift b/SelfieRingLight/Features/Camera/CameraViewModel.swift index 2edeea8..223ee98 100644 --- a/SelfieRingLight/Features/Camera/CameraViewModel.swift +++ b/SelfieRingLight/Features/Camera/CameraViewModel.swift @@ -69,7 +69,8 @@ class CameraViewModel: NSObject { guard let session = captureSession else { return } session.beginConfiguration() - session.sessionPreset = .high + // Use .photo preset for optimal photo quality and consistent 4:3 aspect ratio + session.sessionPreset = .photo let device = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: isUsingFrontCamera ? .front : .back) guard let device, let input = try? AVCaptureDeviceInput(device: device) else { return }