swift - 首次初始化时为空媒体库
问题描述
首次启动时媒体库为空。如果我再次打开它,那么以后一切都会好起来的。我有提供的媒体选择器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) {
}
}
}
解决方案
查看 BSImagePicker 库中的问题,有针对您的具体问题的解释。
https://github.com/mikaoj/BSImagePicker/issues/328
解释是:“如果您使用代理并自己展示图像选择器,您还需要在展示选择器之前请求照片库的权限。”
推荐阅读
- c# - 设置请求超时的集中方法?
- azure-ad-b2c - 在页面加载时显示错误标签的自定义策略
- elasticsearch - Elastic Search - 它是适合分析团队的数据库吗?
- blockchain - 区块链性能和区块链可扩展性有什么区别?
- c# - C# REST API 查询解析器
- create-react-app - Vercel 重定向中的环境变量
- javascript - Console.log 返回我需要的内容,但 return 返回一个 '[object Promise]' 字符串
- python - 如何在 Python 中将数据框行拆分为列?
- c# - 函数不适用于异步语句
- javascript - Angular ngModel,3个数组受到影响