【问题标题】:SwiftUI User selects image and saves it within app to be retrieved laterSwiftUI 用户选择图像并将其保存在应用程序中以供稍后检索
【发布时间】:2022-01-26 04:40:57
【问题描述】:

我需要允许用户选择他们想要保存到稍后将检索的应用程序的图像。我已经在代码中有照片选择器,只是不知道如何保存和检索图像。


struct PhotoPicker: UIViewControllerRepresentable {
    
    @Binding var Badge: UIImage
    
    func makeUIViewController(context: Context) -> UIImagePickerController {
        let picker = UIImagePickerController()
        picker.delegate = context.coordinator
        picker.allowsEditing = true
        return picker
        
    }
    
    func updateUIViewController(_ uiViewController: UIImagePickerController, context: Context) {}
    
    func makeCoordinator() -> Coordinator {
        return Coordinator(photoPicker: self)
        
    }
    
    final class Coordinator: NSObject, UINavigationControllerDelegate, UIImagePickerControllerDelegate {
        let photoPicker: PhotoPicker
        
        init(photoPicker: PhotoPicker){
            self.photoPicker = photoPicker
        }

        
        func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
            if let image = info[.editedImage] as? UIImage{
                photoPicker.Badge = image
                BadgeStatus.toggle()
                
                
            }
            picker.dismiss(animated: true)
            
            
        }
    }
}

【问题讨论】:

  • 你的意思是,将图像写入文件,然后再读取?
  • 是的,无论哪种方式解释得最好。
  • @workingdog 是的,无论哪种方式最好的解释

标签: swift xcode swiftui


【解决方案1】:

这是一些将图像写入文件,然后再次读取的代码。 从这里你应该能够“......保存和检索图像。”

struct ContentView: View {
    @State var image = UIImage(systemName: "globe")! // <-- test image
    @State var fileURL: URL?
    
    var body: some View {
        VStack (spacing: 55) {
            Button(action: { saveImage() }) {        // <-- first save the image to file
                Text("1. write image to file")
            }
            Button(action: { image = UIImage() }) {  // <-- second clear the image from the view
                Text("2. clear image")
            }
            Button(action: { image = loadImage() }) { // <-- third read the image from file
                Text("3. read image from file")
            }
            Image(uiImage: image)
        }
    }
    
    func saveImage() {
        do {
            let furl = try FileManager.default
                .url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
                .appendingPathComponent("imageFile")
                .appendingPathExtension("png")
            fileURL = furl
            try image.pngData()?.write(to: furl)
        } catch {
            print("could not create imageFile")
        }
    }
    
    func loadImage() -> UIImage {
        do {
            if let furl = fileURL {
                let data = try Data(contentsOf: furl)
                if let img = UIImage(data: data) {
                    return img
                }
            }
        } catch {
            print("error: \(error)") // todo
        }
        return UIImage()
    }
    
}

【讨论】:

    猜你喜欢
    • 2013-09-24
    • 1970-01-01
    • 1970-01-01
    • 2022-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-18
    • 1970-01-01
    相关资源
    最近更新 更多