微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHPickerViewController通过PHAsset加载视频

如何解决PHPickerViewController通过PHAsset加载视频

PHPickerViewController允许访问照片库资产的副本以及在结果中返回PHAsset。要获取PHAsset而不是文件副本,我可以这样做:

        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)

然后

 //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应该直接加载这些资产。反正是有避免照片库许可的地方吗?

解决方法

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

是,有点:

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

  2. 不要使用assetIdentifier返回照片库(无论如何它都会是nil

在这种情况下,用户可以为您提供图像数据,仅此而已。选择器不在进程内,真正从库本身中获取的数据也没有,只是用户明确选择的图像。

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

当我的应用程序依赖于PHAsset信息时,我要做的是在展示选择器之前,请求照片库许可(如果需要)。如果可以,我不显示选择器。没有获得许可。因此,用户点击一个按钮,我发现我们没有权限,我请求权限,我们得到了它(比如说),我展示了选择器(进行异步跳舞,因为权限是异步到达的)。看起来很棒。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。