【问题标题】:How to fetch live photo or video from PHPickerViewController delegate如何从 PHPickerViewController 委托获取实时照片或视频
【发布时间】:2020-08-13 14:09:05
【问题描述】:

Apple 的新 iOS 14 PHPickerViewController 委托仅接收 NSItemProvider。 2020 WWDC 视频展示了如何从那里获取 UIImage:

    let prov = result.itemProvider
    prov.loadObject(ofClass: UIImage.self) { im, err in
        if let im = im as? UIImage {
            DispatchQueue.main.async {
                // display the image here

但是如果用户选择了实况照片或视频呢?我们如何得到它?

【问题讨论】:

    标签: ios photokit ios14


    【解决方案1】:

    实时照片很容易;以完全相同的方式进行。你可以这样做,因为 PHLivePhoto 是一个类。所以:

        let prov = result.itemProvider
        prov.loadObject(ofClass: PHLivePhoto.self) { livePhoto, err in
            if let photo = livePhoto as? PHLivePhoto {
                DispatchQueue.main.async {
                    // display the live photo here
    

    视频更难。问题是您不想收到数据;它对你没有好处,而且可能很大。您希望将数据保存到磁盘,以便您可以访问视频 URL,就像 UIImagePickerController 过去所做的那样。实际上,您可以要求项目提供者为您保存其数据,但它希望在完成处理程序返回时释放该数据。我的解决方案是在 .sync 函数中访问 URL:

        let prov = result.itemProvider
        prov.loadFileRepresentation(forTypeIdentifier: UTType.movie.identifier) { url, err in
            if let url = url {
                DispatchQueue.main.sync {
                    // display the video here
    

    【讨论】:

    • 我想知道为什么 PHPickerViewController 不处理直接引用 PHAsset 来创建可以播放或导出的视频 AVAsset?当我选择项目并加载选定的 PHAsset 时,它会请求照片库的权限。但是,当用户已经在选择器中选择了这些项目时,为什么还需要这样做呢?
    • @DeepakSharma 请作为一个单独的问题提出。
    猜你喜欢
    • 1970-01-01
    • 2017-05-04
    • 2021-03-23
    • 2013-03-10
    • 2022-12-29
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多