Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using ImagePicker in SwiftUI

Tags:

ios

swift

swiftui

I am new to SwiftUI. I want to make an app that has an image picker.

I found this article: https://ishtiz.com/swiftui/image-picker-in-swiftui

It says:

To implement an image picker in SwiftUI, you can use the ImagePicker struct provided by the SwiftUI framework. This struct has a pickImage() method that presents the image picker to the user and returns the selected image as a UIImage object.

Providing this example code:

struct ContentView: View {
  @State private var image: UIImage?
  var body: some View {
    VStack {
      if image != nil {
        Image(uiImage: image!)
          .resizable()
          .scaledToFit()
      }
      Button("Select Image") {
        self.image = ImagePicker.pickImage()
      }
    }
  }
}

I added the code to my project but it doesn’t build:

Cannot find 'ImagePicker' in scope

Do I need to import something?

like image 876
Darren Jackson Avatar asked Oct 16 '25 04:10

Darren Jackson


1 Answers

import PhotosUI

For iOS 16.0 + you can use PhotoPicker, to select multiple photos.

  @available(iOS 16.0, *)
    struct MultiplePhotoPickerView<Content: View>: View {
        @Binding var imagesData: [Data]
        let content: () -> Content
        @State private var selectedItems: [PhotosPickerItem] = []
        
        var body: some View {
            PhotosPicker(selection: $selectedItems,
                         matching: .images) {
                content()
            }.onChange(of: selectedItems) { selectedItems in
                Task {
                    imagesData.removeAll()
                    for item in selectedItems {
                        if let imageData = try? await item.loadTransferable(type: Data.self) {
                            self.imagesData.append(imageData)
                        }
                    }
                }
            }
        }
    }

Use it anywhere in app

@State private var selectedImagesData: [Data] = []
    
MultiplePhotoPickerView(imagesData: $selectedImagesData) {
                        Label("Library", systemImage: SystemIcon.libraryIcon.rawValue)
                   }.onChange(of: selectedImagesData) { value in
                value.forEach() { image in
                    // do whatever need to be done with selected images
                   //convert image data to Image
                }
                selectedImagesData.removeAll()
            }
like image 117
Nav Brar Avatar answered Oct 17 '25 21:10

Nav Brar



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!