如何从 PHPickerViewController 检索 PHAsset?

问题描述 投票:0回答:1

WWDC20 苹果推出了 PHPickerViewController - 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)
}
ios swift phasset phpickerviewcontroller
1个回答
27
投票

我设法在苹果论坛上找到了这个框架的开发者的答案:

是的,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
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.