From 19e17b7051fcf6064f78d17dde9bd78d29aefb26 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Sun, 4 Jan 2026 14:59:59 -0600 Subject: [PATCH] Fix camera position switch to work in real-time - Pass camera position from settings to CameraContainerView - Add onChange handler to regenerate camera session when position changes - Remove hardcoded .front camera position - Camera now switches immediately when changed in settings --- SelfieCam/Features/Camera/ContentView.swift | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/SelfieCam/Features/Camera/ContentView.swift b/SelfieCam/Features/Camera/ContentView.swift index 5c22495..0871b41 100644 --- a/SelfieCam/Features/Camera/ContentView.swift +++ b/SelfieCam/Features/Camera/ContentView.swift @@ -28,6 +28,7 @@ struct ContentView: View { EquatableView(content: CameraContainerView( settings: settings, sessionKey: cameraSessionKey, + cameraPosition: settings.cameraPosition, onImageCaptured: { image in handlePhotoCaptured(image) } @@ -79,6 +80,10 @@ struct ContentView: View { settings.flashMode = settings.isRingLightEnabled ? .on : .off } } + .onChange(of: settings.cameraPosition) { _, _ in + // Force camera session recreation when camera position changes + cameraSessionKey = UUID() + } .sheet(isPresented: $showSettings) { SettingsView(viewModel: settings, showPaywall: $showPaywall) } @@ -162,6 +167,7 @@ struct ContentView: View { struct CameraContainerView: View, Equatable { let settings: SettingsViewModel let sessionKey: UUID + let cameraPosition: CameraPosition let onImageCaptured: (UIImage) -> Void // Only compare sessionKey for equality - ignore settings and callback changes @@ -170,7 +176,7 @@ struct CameraContainerView: View, Equatable { } var body: some View { - let _ = Design.debugLog("CameraContainerView body evaluated - sessionKey: \(sessionKey)") + let _ = Design.debugLog("CameraContainerView body evaluated - sessionKey: \(sessionKey), position: \(cameraPosition)") MCamera() .setCameraScreen { cameraManager, namespace, closeAction in CustomCameraScreen( @@ -182,9 +188,7 @@ struct CameraContainerView: View, Equatable { ) } .setCapturedMediaScreen(nil) - // Use front camera as default for selfie app - don't read from settings here - // to avoid triggering @Observable tracking which breaks the camera - .setCameraPosition(.front) + .setCameraPosition(cameraPosition) .startSession() } }