如何从PHPicker检索PHAsset?



WWDC20中,Apple推出了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 返回资产标识符,需要初始化 PHPicker配置与库。

请注意,PHPicker 不会扩展有限的照片库 如果用户将你的应用置于"受限"中,则对所选项目的访问权限 照片库模式。这将是一个很好的机会重新考虑如果 该应用程序确实需要直接访问照片库或可以使用 只是图像和视频数据。但这实际上取决于应用程序。

"认识新的照片选取器"会话的相关部分 从 10 分 20 秒开始。

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
}
}

相关内容

  • 没有找到相关文章

最新更新