首页 > 解决方案 > 首次初始化时为空媒体库

问题描述

首次启动时媒体库为空。如果我再次打开它,那么以后一切都会好起来的。我有提供的媒体选择器BSImagePicker

为什么媒体库在第一次初始化时为空?

ContentView.swift

import SwiftUI

struct ContentView: View {

    @State private var isPresentedSheet: Bool = false

    var body: some View {
        Button(action: {
            self.isPresentedSheet = true
        }) {
            Text("Add media")
        }
        .sheet(isPresented: self.$isPresentedSheet, content: {
            ImagePickerCoordinatorView()
        })
    }

}

MediaPicker.swift

import SwiftUI
import Photos
import BSImagePicker

public struct ImagePickerCoordinatorView {

    @Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>

    private func dismiss() {
        self.presentationMode.wrappedValue.dismiss()
    }

}

extension ImagePickerCoordinatorView: UIViewControllerRepresentable {

    public typealias UIViewControllerType = ImagePickerController

    public func makeUIViewController(context: Context) -> ImagePickerController {
        let picker = ImagePickerController()
        picker.settings.selection.max = 5
        picker.settings.selection.unselectOnReachingMax = false
        picker.settings.theme.selectionStyle = .numbered
        picker.settings.fetch.assets.supportedMediaTypes = [.image, .video]
        picker.imagePickerDelegate = context.coordinator
        return picker
    }

    public func updateUIViewController(_ uiViewController: ImagePickerController, context: Context) {
    }

    public func makeCoordinator() -> Coordinator {
        return Coordinator(self)
    }

}

extension ImagePickerCoordinatorView {

    public class Coordinator: ImagePickerControllerDelegate {

        private let parent: ImagePickerCoordinatorView

        public init(_ parent: ImagePickerCoordinatorView) {
            self.parent = parent
        }

        public func imagePicker(_ imagePicker: ImagePickerController, didSelectAsset asset: PHAsset) {
        }

        public func imagePicker(_ imagePicker: ImagePickerController, didDeselectAsset asset: PHAsset) {
        }

        public func imagePicker(_ imagePicker: ImagePickerController, didFinishWithAssets assets: [PHAsset]) {
            print(assets)
            parent.dismiss()
        }

        public func imagePicker(_ imagePicker: ImagePickerController, didCancelWithAssets assets: [PHAsset]) {
            parent.dismiss()
        }

        public func imagePicker(_ imagePicker: ImagePickerController, didReachSelectionLimit count: Int) {
        }

    }

}

标签: swiftswiftui

解决方案


查看 BSImagePicker 库中的问题,有针对您的具体问题的解释。

https://github.com/mikaoj/BSImagePicker/issues/328

解释是:“如果您使用代理并自己展示图像选择器,您还需要在展示选择器之前请求照片库的权限。”


推荐阅读