如何从 PHPickerViewController 委托获取实时照片或视频
Posted
技术标签:
【中文标题】如何从 PHPickerViewController 委托获取实时照片或视频【英文标题】:How to fetch live photo or video from PHPickerViewController delegate 【发布时间】: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
但是如果用户选择了实况照片或视频呢?我们如何得到它?
【问题讨论】:
【参考方案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 请作为一个单独的问题提出。 已经在这里问过***.com/questions/64223430/…以上是关于如何从 PHPickerViewController 委托获取实时照片或视频的主要内容,如果未能解决你的问题,请参考以下文章
如何将数据从回收器适配器发送到片段 |如何从 recyclerview 适配器调用片段函数
如何从服务器获取和设置 android 中的 API(从服务器获取 int 值)?如何绑定和实现这个