From 1c07009e06434cf0970c574cc1e51bf0f6f54706 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Sun, 4 Jan 2026 15:08:33 -0600 Subject: [PATCH] Fix camera position switch using runtime CameraManager.setCameraPosition() - Add onChange handler in CustomCameraScreen to watch cameraPositionRaw - Call cameraManager.setCameraPosition() at runtime when setting changes - Camera now switches without needing to recreate the entire MCamera view - Keep onDismiss fallback in ContentView as safety net --- .../Camera/Views/CustomCameraScreen.swift | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/SelfieCam/Features/Camera/Views/CustomCameraScreen.swift b/SelfieCam/Features/Camera/Views/CustomCameraScreen.swift index e438d86..095ed3c 100644 --- a/SelfieCam/Features/Camera/Views/CustomCameraScreen.swift +++ b/SelfieCam/Features/Camera/Views/CustomCameraScreen.swift @@ -38,6 +38,9 @@ struct CustomCameraScreen: MCameraScreen { // Pinch to zoom gesture state @GestureState private var magnification: CGFloat = 1.0 @State private var lastMagnification: CGFloat = 1.0 + + // Track camera position for runtime switching + @State private var currentCameraPosition: CameraPosition? var body: some View { ZStack { @@ -159,6 +162,24 @@ struct CustomCameraScreen: MCameraScreen { updateFlashSyncState() // Initialize zoom gesture state lastMagnification = zoomFactor + // Track initial camera position + currentCameraPosition = cameraSettings.cameraPosition + } + .onChange(of: cameraSettings.cameraPositionRaw) { _, newRaw in + // Switch camera when position changes in settings + let newPosition: CameraPosition = newRaw == "front" ? .front : .back + if currentCameraPosition != newPosition { + Design.debugLog("Camera position changed to \(newPosition) - switching camera...") + currentCameraPosition = newPosition + Task { + do { + try await cameraManager.setCameraPosition(newPosition) + Design.debugLog("Camera switched successfully to \(newPosition)") + } catch { + Design.debugLog("Failed to switch camera: \(error)") + } + } + } } .onChange(of: cameraSettings.isFlashSyncedWithRingLight) { _, _ in // Only update when sync setting changes, not on every color change