从照片库中删除图像

Delete image from Photo Gallery

在我的应用程序中,我有一个功能可以将图像保存到在照片库中创建的自定义 collection 相册中:

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 中创建的。此外,它们被保存到文档目录中,然后显示在我的应用程序中 collection 视图中单独的 VC。

稍后用户可以 select 想要的照片,然后显示在新的 VC 中,然后单击垃圾桶 TabBar 按钮将其删除。当按下按钮时,图像将从文档目录中删除,因此它也会从 collection 视图中消失。

我想要实现的是同时从照片库中删除这张照片。因此,当用户单击垃圾箱按钮时,也会从文档目录和照片库中删除 selected 照片。

到目前为止我取得的成就 - 创建了获取图像 URLs 的函数,并根据 url 删除项目,就像我对文档目录所做的那样:

func deleteSelectedPhotoFromGallery() {
    PHPhotoLibrary.shared().performChanges({
        let imageAssetToDelete = PHAsset.fetchAssets(withALAssetURLs: self.loadURL() as! [URL], options: nil)
        PHAssetChangeRequest.deleteAssets(imageAssetToDelete)
    })
}

编辑:这就是我得到 URLs:

的方式
func loadURL() -> [NSURL?]? {
    let retrievedData = UserDefaults.standard.object(forKey: DefaultKeys.imagesURL.rawValue) as? [String]
    return retrievedData?.map { NSURL(string: [=12=]) }
}

问题:

基本上,我需要一些方法来删除之前保存的照片库中的图像。我想知道您是否可以在保存图像时以某种方式检测到图像 URL 或路径,然后将其路径存储到 UserDefaults 中,然后使用它的路径或 URL.

删除它

以前有过关于这个问题的问题,但是他们使用 ImagePicker 来检测图像 URL 并且在 objc 中写入的位置,但我想在 swift 中有一个解决方案并且不使用 ImagePicker .

谢谢。

fetchAssets(withALAssetURLs) - will be deprecated, what to use instead? how to get image URL that is being saved to PhotoLibrary?

你不知道。这就是它被弃用的原因!你得到资产的localIdentifier。这使您可以访问资产并在以后将其删除。

您的完成处理程序为空。那就是问题所在。编写完成处理程序并从占位符中获取本地标识符。