ios - 如何从 PHPicker 中检索 PHAsset?
问题描述
在WWDC20苹果推出了PHPicker - UIImagePickerController 的现代替代品。
我想知道是否可以使用新的照片选择器检索 PHAsset?
这是我的代码:
private func presentPicker(filter: PHPickerFilter) {
var configuration = PHPickerConfiguration()
configuration.filter = filter
configuration.selectionLimit = 0
let picker = PHPickerViewController(configuration: configuration)
picker.delegate = self
present(picker, animated: true)
}
func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
dismiss(animated: true)
}
解决方案
我设法在苹果论坛上从这个框架的开发者那里找到了答案:
是的,PHPickerResult 具有assetIdentifier 属性,它可以包含一个本地标识符以从库中获取 PHAsset。要让 PHPicker 返回资产标识符,您需要使用库初始化 PHPickerConfiguration。
请注意,如果用户将您的应用程序置于受限照片库模式,PHPicker 不会扩展所选项目的受限照片库访问权限。如果该应用程序真的需要直接访问照片库还是只能使用图像和视频数据,这将是一个重新考虑的好机会。但这真的取决于应用程序。
“认识新的照片选择器”会话的相关部分从10m 20s开始。
PhotoKit 访问的示例代码如下所示:
import UIKit
import PhotosUI
class PhotoKitPickerViewController: UIViewController, PHPickerViewControllerDelegate {
@IBAction func presentPicker(_ sender: Any) {
let photoLibrary = PHPhotoLibrary.shared()
let configuration = PHPickerConfiguration(photoLibrary: photoLibrary)
let picker = PHPickerViewController(configuration: configuration)
picker.delegate = self
present(picker, animated: true)
}
func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
picker.dismiss(animated: true)
let identifiers = results.compactMap(\.assetIdentifier)
let fetchResult = PHAsset.fetchAssets(withLocalIdentifiers: identifiers, options: nil)
// TODO: Do something with the fetch result if you have Photos Library access
}
}
推荐阅读
- python - 对这些数据包使用什么校验和算法?
- c++ - gcc 不将模板化内联 constexpr 变量的地址视为常量表达式?
- c# - 添加参数 HttpClient C#
- node.js - Nginx 有时“连接到上游时连接()失败(111:连接被拒绝)”
- c - 自午夜以来的纳秒
- c++ - 你如何组合两个 char_t* 字符串?
- react-native - FlatList 滚动到顶部,而子组件中的 FlatList
- gnuplot - 将许多 .gp 文件传递给 gnuplot 与重复传递一个文件
- git - GitHub 中 HTTPS 和 SSH 的混淆
- java - 如何键入用户光标的位置