import SwiftUI import UIKit struct CameraPicker: UIViewControllerRepresentable { @Environment(\.dismiss) private var dismiss let onImagePicked: (UIImage, [String: Any]?) -> Void func makeUIViewController(context: Context) -> UIImagePickerController { let picker = UIImagePickerController() picker.sourceType = .camera picker.delegate = context.coordinator return picker } func updateUIViewController(_: UIImagePickerController, context _: Context) {} func makeCoordinator() -> Coordinator { Coordinator(dismiss: dismiss, onImagePicked: onImagePicked) } class Coordinator: NSObject, UIImagePickerControllerDelegate, UINavigationControllerDelegate { let dismiss: DismissAction let onImagePicked: (UIImage, [String: Any]?) -> Void init(dismiss: DismissAction, onImagePicked: @escaping (UIImage, [String: Any]?) -> Void) { self.dismiss = dismiss self.onImagePicked = onImagePicked } func imagePickerController(_: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]) { if let image = info[.originalImage] as? UIImage { let metadata = info[.mediaMetadata] as? [String: Any] onImagePicked(image, metadata) } dismiss() } func imagePickerControllerDidCancel(_: UIImagePickerController) { dismiss() } } } #Preview { @Previewable @State var show = true Color.gray.opacity(0.1) .sheet(isPresented: $show) { CameraPicker { _, _ in } } }