SwiftUI: how to save the camera photo to somewhere of my app
here is my code :
ContentView.swift:
import SwiftUI struct ContentView: View { @State private var showImagePicker: Bool = false @State private var image:Image? = nil var body: some View { VStack{ image?.resizable() .scaledToFit() .clipShape(Circle()) Spacer() Button("take photo"){ self.showImagePicker = true }.padding() .background(Color.green) .font(.system(size: 40)) .foregroundColor(Color.white) .cornerRadius(90) Spacer().frame(width: 0, height: 20, alignment: .topLeading) }.sheet(isPresented: self.$showImagePicker){ PhotoCaptureView(showImagePicker: self.$showImagePicker, image: self.$image) } } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }
PhotoCapture.swift:
import SwiftUI struct PhotoCaptureView: View { @Binding var showImagePicker: Bool @Binding var image:Image? var body: some View { ImagePicker(isShown: $showImagePicker, image: $image) } } #if DEBUG struct PhotoCaptureView_Previews: PreviewProvider { static var previews: some View { PhotoCaptureView(showImagePicker: .constant(false), image: .constant(Image(""))) } } #endif
ImagePicker.swift:
import Foundation import SwiftUI class ImagePickerCoorinator: NSObject, UINavigationControllerDelegate,UIImagePickerControllerDelegate { @Binding var isShown: Bool @Binding var image: Image? init(isShown: Binding, image: Binding<image?>){ _isShown = isShown _image = image } func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { let uiImage = info[UIImagePickerController.InfoKey.originalImage] as! UIImage image = Image(uiImage:uiImage) isShown = false } func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { isShown = false } } struct ImagePicker: UIViewControllerRepresentable { @Binding var isShown: Bool @Binding var image: Image? func updateUIViewController(_ uiViewController: UIImagePickerController, context: UIViewControllerRepresentableContext) { } func makeCoordinator() -> ImagePickerCoorinator { return ImagePickerCoorinator(isShown: $isShown, image: $image) } func makeUIViewController(context: UIViewControllerRepresentableContext) -> UIImagePickerController { let picker = UIImagePickerController() picker.delegate = context.coordinator picker.sourceType = .camera picker.allowsEditing = false picker.cameraDevice = .front picker.cameraCaptureMode = .photo picker.cameraFlashMode = .off picker.showsCameraControls = true picker.videoQuality = .type640x480 //picker.cameraViewTransform = picker.cameraViewTransform.scaledBy(x: 1, y: -1) picker.isEditing = true return picker } }