MobileMkch-iOS/MobileMkch/ImagePicker.swift
Lain Iwakura 8cab7bac36
Some checks failed
Build IPA / build (push) Has been cancelled
add pics support
2025-08-08 15:45:20 +03:00

58 lines
1.9 KiB
Swift

import SwiftUI
import PhotosUI
struct ImagePickerView: UIViewControllerRepresentable {
let selectionLimit: Int
let onComplete: ([UIImage]) -> Void
func makeUIViewController(context: Context) -> PHPickerViewController {
var configuration = PHPickerConfiguration()
configuration.filter = .images
configuration.selectionLimit = selectionLimit
let picker = PHPickerViewController(configuration: configuration)
picker.delegate = context.coordinator
return picker
}
func updateUIViewController(_ uiViewController: PHPickerViewController, context: Context) {}
func makeCoordinator() -> Coordinator {
Coordinator(onComplete: onComplete)
}
final class Coordinator: NSObject, PHPickerViewControllerDelegate {
let onComplete: ([UIImage]) -> Void
init(onComplete: @escaping ([UIImage]) -> Void) {
self.onComplete = onComplete
}
func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
guard !results.isEmpty else {
picker.dismiss(animated: true)
return
}
let providers = results.map { $0.itemProvider }
var images: [UIImage] = []
let group = DispatchGroup()
for provider in providers {
if provider.canLoadObject(ofClass: UIImage.self) {
group.enter()
provider.loadObject(ofClass: UIImage.self) { object, _ in
if let img = object as? UIImage {
images.append(img)
}
group.leave()
}
}
}
group.notify(queue: .main) {
self.onComplete(images)
picker.dismiss(animated: true)
}
}
}
}