I add a photo to the view, but after closing the application, the photo is removed, how can I save the photo? Is there some kind of property wrapper? Thank you in advance!
ContentView (This is where the photos that the user has selected are stored):
struct ContentView: View {
@State private var showSheet: Bool = false
@State private var showImagePicker: Bool = false
@State private var sourceType: UIImagePickerController.SourceType = .camera
@State private var image: UIImage?
var body: some View {
VStack {
Image(uiImage: image ?? UIImage(named: "unknown")!)
.resizable()
.frame(width: 300, height: 300)
Button("change your avatar") {
self.showSheet = true
}.padding()
.actionSheet(isPresented: $showSheet) {
ActionSheet(title: Text("Changing the avatar"), message: Text("Choosing a photo"), buttons: [
.default(Text("Gallery")) {
self.showImagePicker = true
self.sourceType = .photoLibrary
},
.default(Text("Camera")) {
self.showImagePicker = true
self.sourceType = .camera
},
.cancel()
])
}
}
.padding(.bottom, 70)
.sheet(isPresented: $showImagePicker) {
ImagePicker(image: self.$image, isShown: self.$showImagePicker, sourceType: self.sourceType)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
ImagePicker (The functions of the camera and gallery are spelled out here):
import Foundation
import SwiftUI
class ImagePickerCoordinator: NSObject, UINavigationControllerDelegate, UIImagePickerControllerDelegate {
@Binding var image: UIImage?
@Binding var isShown: Bool
init(image: Binding<UIImage?>, isShown: Binding<Bool>) {
_image = image
_isShown = isShown
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let uiImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
image = uiImage
isShown = false
}
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
isShown = false
}
}
struct ImagePicker: UIViewControllerRepresentable {
typealias UIViewControllerType = UIImagePickerController
typealias Coordinator = ImagePickerCoordinator
@Binding var image: UIImage?
@Binding var isShown: Bool
var sourceType: UIImagePickerController.SourceType = .camera
func updateUIViewController(_ uiViewController: UIImagePickerController, context: UIViewControllerRepresentableContext<ImagePicker>) {
}
func makeCoordinator() -> ImagePicker.Coordinator {
return ImagePickerCoordinator(image: $image, isShown: $isShown)
}
func makeUIViewController(context: UIViewControllerRepresentableContext<ImagePicker>) -> UIImagePickerController {
let picker = UIImagePickerController()
picker.sourceType = sourceType
picker.delegate = context.coordinator
return picker
}
}