From b0361af7a85bfa1e7f21178670071a41b7de1782 Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Wed, 19 Oct 2022 14:25:50 +0200 Subject: [PATCH] Add ImagePicker view to AppCore --- .../AppCore/SharedUI/ImagePicker.swift | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 Examples/xx-messenger/Sources/AppCore/SharedUI/ImagePicker.swift diff --git a/Examples/xx-messenger/Sources/AppCore/SharedUI/ImagePicker.swift b/Examples/xx-messenger/Sources/AppCore/SharedUI/ImagePicker.swift new file mode 100644 index 00000000..c0b5fbad --- /dev/null +++ b/Examples/xx-messenger/Sources/AppCore/SharedUI/ImagePicker.swift @@ -0,0 +1,49 @@ +import UIKit +import SwiftUI + +public struct ImagePicker: UIViewControllerRepresentable { + public init(onImport: @escaping (UIImage) -> Void) { + self.onImport = onImport + } + + var onImport: (UIImage) -> Void + @Environment(\.presentationMode) private var presentationMode + + public func makeCoordinator() -> Coordinator { + Coordinator(self) + } + + public func makeUIViewController(context: Context) -> UIImagePickerController { + let controller = UIImagePickerController() + controller.delegate = context.coordinator + return controller + } + + public func updateUIViewController( + _ uiViewController: UIImagePickerController, + context: Context + ) {} +} + +extension ImagePicker { + public final class Coordinator: NSObject, UIImagePickerControllerDelegate, UINavigationControllerDelegate { + init(_ picker: ImagePicker) { + self.picker = picker + super.init() + } + + public func imagePickerController( + _ controller: UIImagePickerController, + didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any] + ) { + if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage { + DispatchQueue.main.async { + self.picker.onImport(image) + } + } + picker.presentationMode.wrappedValue.dismiss() + } + + let picker: ImagePicker + } +} -- GitLab