64 lines
1.9 KiB
Swift
64 lines
1.9 KiB
Swift
import SwiftUI
|
|
import Combine
|
|
import UIKit
|
|
|
|
final class ImagePicker : ObservableObject {
|
|
|
|
static let shared : ImagePicker = ImagePicker()
|
|
|
|
private init() {} //force using the singleton: ImagePicker.shared
|
|
let view = ImagePicker.View()
|
|
let coordinator = ImagePicker.Coordinator()
|
|
|
|
// Bindable Object part
|
|
let objectWillChange = PassthroughSubject<UIImage?, Never>()
|
|
|
|
var image: UIImage? = .none {
|
|
didSet {
|
|
objectWillChange.send(image)
|
|
print("ImagePicker::image Image Changed")
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
extension ImagePicker {
|
|
|
|
class Coordinator: NSObject, UINavigationControllerDelegate, UIImagePickerControllerDelegate {
|
|
|
|
// UIImagePickerControllerDelegate
|
|
func imagePickerController(_ picker: UIImagePickerController,
|
|
didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
|
|
let uiImage = info[UIImagePickerController.InfoKey.originalImage] as! UIImage
|
|
ImagePicker.shared.image = uiImage
|
|
picker.dismiss(animated:true)
|
|
}
|
|
|
|
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
|
|
picker.dismiss(animated:true)
|
|
}
|
|
}
|
|
|
|
|
|
struct View: UIViewControllerRepresentable {
|
|
|
|
func makeCoordinator() -> Coordinator {
|
|
ImagePicker.shared.coordinator
|
|
}
|
|
|
|
func makeUIViewController(context: UIViewControllerRepresentableContext<ImagePicker.View>) -> UIImagePickerController {
|
|
let picker = UIImagePickerController()
|
|
picker.delegate = context.coordinator
|
|
|
|
return picker
|
|
}
|
|
|
|
func updateUIViewController(_ uiViewController: UIImagePickerController,
|
|
context: UIViewControllerRepresentableContext<ImagePicker.View>) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|