在我的应用程序中,我有一个功能可以将图像保存到照片库中创建的自定义集合相册中:
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)
}
UIImages由用户在之前的VC中创建。此外,它们将保存到文档目录中,然后在我的应用程序中显示在单独VC上的集合视图中。
稍后用户可以选择所需的照片,然后在新的VC中显示并通过单击“废纸篓标签栏”将其删除。按下按钮后,图像将从文档目录中删除,因此它也会从集合视图中消失。
我想要达到的目的是同时从照片库中删除这张照片。因此,当用户单击“废纸篓”按钮时,也会删除“文档目录”和“照片库”中的所选照片。
到目前为止我所取得的成就 - 创建了带有图片网址的功能,并根据该网址删除了项目,就像我在文档目录中所做的那样:
func deleteSelectedPhotoFromGallery() {
PHPhotoLibrary.shared().performChanges({
let imageAssetToDelete = PHAsset.fetchAssets(withALAssetURLs: self.loadURL() as! [URL], options: nil)
PHAssetChangeRequest.deleteAssets(imageAssetToDelete)
})
}
编辑:这就是我如何获取网址:
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编写的位置,但我想在swift中使用解决方案而不使用ImagePicker。
感谢。
答案 0 :(得分:1)
fetchAssets(withALAssetURLs) - 将被弃用,改为使用什么? 如何获取保存到PhotoLibrary的图像URL?
你没有。这就是它被弃用的原因!您获得资产localIdentifier
。这允许您访问资产并在以后删除它。
您的完成处理程序为空。那就是问题所在。编写完成处理程序并从占位符获取本地标识符。