Skip to content

iOS 14 PHPickerViewController wrapper for SwiftUI with data loader support.

License

Notifications You must be signed in to change notification settings

inamiy/SwiftUI-PhotoPicker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SwiftUI-PhotoPicker

iOS 14 PHPickerViewController wrapper for SwiftUI with data loader support.

How to Use

struct ContentView: View
{
    @State
    private var datas: [PhotoPickerData?] = []

    @State
    private var isShowingPicker = false

    var body: some View
    {
        VStack(spacing: 40) {
            Button("Select Image") {
                self.isShowingPicker = true
            }

            ScrollView {
                LazyVGrid(columns: Array(repeating: GridItem(), count: 2)) {
                    ForEach(datas.enumerated().map { ($0, $1) }, id: \.0) { i, data in
                        if let image = data?.image {
                            Image(uiImage: image)
                                .resizable()
                                .scaledToFit()
                        }
                        else if let videoURL = data?.video {
                            VideoPlayer(player: AVPlayer(url: videoURL))
                                .frame(width: 200, height: 200, alignment: .center)
                        }
                        else if let livePhoto = data?.livePhoto {
                            LivePhotoView(livePhoto: .constant(livePhoto))
                        }
                    }
                }
            }
        }
        .sheet(isPresented: $isShowingPicker) {
            PhotoPicker(
                datas: $datas,
                configuration: pickerConfig,
                pattern: pickerPattern
            )
        }
    }
}

private let pickerPattern: PickerPattern = .any(of: [.images, .videos, .livePhotos])

private let pickerConfig: PHPickerConfiguration = {
    var config = PHPickerConfiguration()
    config.filter = pickerPattern.filter
    config.selectionLimit = 0
    config.preferredAssetRepresentationMode = .current // required for video
    return config
}()

Example

See Examples for more information.

License

MIT

About

iOS 14 PHPickerViewController wrapper for SwiftUI with data loader support.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages