首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHPickerViewController通过PHAsset加载视频

PHPickerViewController通过PHAsset加载视频
EN

Stack Overflow用户
提问于 2020-10-06 09:53:33
回答 1查看 1.9K关注 0票数 4

PHPickerViewController允许访问照片库资产的副本,以及返回结果中的PHAssets。要获得PHAssets而不是文件副本,我需要:

代码语言:javascript
复制
        let photolibrary = PHPhotoLibrary.shared()
        var configuration = PHPickerConfiguration(photoLibrary: photolibrary)
        configuration.filter = .videos
        configuration.selectionLimit = 0
        
        let picker = PHPickerViewController(configuration: configuration)
        picker.delegate = self
        self.present(picker, animated: true, completion: nil)

然后,

代码语言:javascript
复制
 //MARK:- PHPickerViewController delegate

@available(iOS 14, *)
func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
    
    picker.dismiss(animated: true) {
        let identifiers:[String] = results.compactMap(\.assetIdentifier)
        let fetchResult = PHAsset.fetchAssets(withLocalIdentifiers: identifiers, options: nil)
        
        NSLog("\(identifiers), \(fetchResult)")
    }
    
}

但问题是,一旦照片选择器被取消,它就会提示进行照片库访问,这是令人困惑的,而且由于用户以任何方式隐式地授予了对PHPickerViewController中所选资产的访问权限,PHPhotoLibrary应该直接加载这些资产。是否存在避免照片库许可的问题?

EN

回答 1

Stack Overflow用户

发布于 2020-10-06 15:21:58

是否有避免照片库许可的地方?

是的,算是:

PHPickerConfiguration()

  1. PHPickerConfiguration(photoLibrary: photolibrary)改为PHPickerConfiguration(photoLibrary: photolibrary)

  1. 不使用assetIdentifier返回照片库(无论如何都是nil )

在这种情况下,用户可以提供图像数据,但仅此而已。选择程序没有进程,并且没有真正从库本身获得的数据,只是用户显式选择的图像。

但是,如果您的目标确实是返回到照片库并获得PHAsset,那么您必须获得许可,因为您现在确实试图在应用程序的幕后探索照片库。

当我的应用程序依赖于PHAsset信息时,我所做的是在呈现选择器之前请求照片库许可(如果需要的话),如果不能获得许可,我就不提供选择器。因此,用户点击一个按钮,我发现我们没有权限,我请求许可,我们得到它(比如说),我呈现选择器(执行异步舞蹈,因为权限是异步到达的)。真不错。

顺便说一句,UIImagePickerController也是如此。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64223430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档