How to open the ImagePicker in SwiftUI?

后端 未结 8 1304
生来不讨喜
生来不讨喜 2020-11-29 23:53

I need to open the ImagePicker in my app using SwiftUI, how can I do that?

I thought about using the UIImagePickerController, but I don\'t know how to do that in Swi

8条回答
  •  醉话见心
    2020-11-30 00:34

    I implemented it like this:

        import SwiftUI
    
        final class ImagePickerCoordinator: NSObject {
    
            @Binding var image: UIImage?
            @Binding var takePhoto: Bool
    
            init(image: Binding, takePhoto: Binding) {
                _image = image
                _takePhoto = takePhoto
            }
        }
    
        struct ShowImagePicker: UIViewControllerRepresentable {
    
            @Binding var image: UIImage?
            @Binding var takePhoto: Bool
    
            func makeCoordinator() -> ImagePickerCoordinator {
                ImagePickerCoordinator(image: $image, takePhoto: $takePhoto)
            }
    
            func makeUIViewController(context: Context) -> UIImagePickerController {
    
                let pickerController = UIImagePickerController()
                pickerController.delegate = context.coordinator
    
                guard UIImagePickerController.isSourceTypeAvailable(.camera) else { return pickerController }
    
                switch self.takePhoto {
                case true:
                    pickerController.sourceType = .camera
                case false:
                    pickerController.sourceType = .photoLibrary
                }
    
                pickerController.allowsEditing = true
                return pickerController
            }
    
            func updateUIViewController(_ uiViewController: UIImagePickerController, context: Context) {}
        }
    
        extension ImagePickerCoordinator: UINavigationControllerDelegate, UIImagePickerControllerDelegate {
    
            func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    
                guard let uiImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage else { return }
    
                self.image = uiImage
                picker.dismiss(animated: true, completion: nil)
            }
    
            func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
                picker.dismiss(animated: true, completion: nil)
            }
    
    }
    

    Add the logic of just two buttons to your View that's enough...))

提交回复
热议问题