在我的应用程序中,我具有一个将图像保存到在“照片库”中创建的自定义相册中的功能:
func save(image: UIImage) {
if assetCollection == nil {
return
}
PHPhotoLibrary.shared().performChanges({
let assetChangeRequest = PHAssetChangeRequest.creationRequestForAsset(from: image)
let assetPlaceHolder = assetChangeRequest.placeholderForCreatedAsset
let albumChangeRequest = PHAssetCollectionChangeRequest(for: self.assetCollection)
let enumeration: NSArray = [assetPlaceHolder!]
albumChangeRequest!.addAssets(enumeration)
}, completionHandler: nil)
}
UIImage由用户在以前的VC中创建。此外,它们还会保存到文档目录中,然后在单独的VC上的收藏夹视图中显示在我的应用程序中。
稍后,用户可以选择所需的照片,然后将其显示在新的VC中,并通过单击垃圾箱TabBarButton将其删除。按下按钮后,图像将从“文档目录”中删除,因此它也将从集合视图中消失。
我想要实现的是同时从照片库中删除这张照片。因此,当用户单击“废纸rash”按钮时,还要从“文档目录”和“照片库”中删除选定的照片。
到目前为止,我所取得的成就-创建了使用图像URL并根据该URL删除项目的函数,就像我对Documents Directory所做的那样:
func deleteSelectedPhotoFromGallery() {
PHPhotoLibrary.shared().performChanges({
let imageAssetToDelete = PHAsset.fetchAssets(withALAssetURLs: self.loadURL() as! [URL], options: nil)
PHAssetChangeRequest.deleteAssets(imageAssetToDelete)
})
}
编辑:那就是我如何获得URL:
func loadURL() -> [NSURL?]? {
let retrievedData = UserDefaults.standard.object(forKey: DefaultKeys.imagesURL.rawValue) as? [String]
return retrievedData?.map { NSURL(string: $0) }
}
问题:
基本上,我需要一些方法可以从以前保存的照片库中删除图像。我想知道您是否可以以某种方式检测图像URL或路径的保存时间,然后将其路径存储到UserDefaults中,然后使用其路径或URL删除它。
以前对此问题一直存在疑问,但是他们使用ImagePicker来检测图像URL以及用objc编写的位置,但是我想在不使用ImagePicker的情况下迅速找到解决方案。
谢谢。
最佳答案
fetchAssets(withALAssetURLs)-将不建议使用,改用什么?
如何获取要保存到PhotoLibrary的图像URL?
你没有这就是为什么不推荐使用的原因!您将获得资产的localIdentifier
。这使您可以访问资产并在以后将其删除。
您的完成处理程序为空。那就是问题所在。编写完成处理程序,并从占位符获取本地标识符。