-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPhotoPicker.swift
48 lines (40 loc) · 1.32 KB
/
PhotoPicker.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/*
Swift class providing photo picking functions in our app.
*/
import PhotosUI
import SwiftUI
@MainActor
class PhotoPickerViewModel: ObservableObject {
@Published var selectedImage: UIImage? = nil
@Published var imageSelection: PhotosPickerItem? = nil {
didSet {
setImage(from: imageSelection)
}
}
private func setImage(from selection: PhotosPickerItem?) {
guard let selection else { return }
Task {
if let data = try? await selection.loadTransferable(type: Data.self) {
if let uiImage = UIImage(data: data) {
selectedImage = uiImage
return
}
}
}
}
}
//sample of how this photo picker can be used with a button
#Preview {
@Previewable @StateObject var viewModel = PhotoPickerViewModel()
ZStack (alignment: .center) {
Color.purple.ignoresSafeArea()
HStack (alignment: .center) { //bottom PhotosPicker bar
PhotosPicker(selection: $viewModel.imageSelection, matching: .images) { //button content
Image(systemName: "photo.on.rectangle.angled")
.foregroundStyle(.white)
.font(.largeTitle)
}
.padding()
}
}
}