【问题标题】:How to delete photos added in specific albums but not in others?如何删除添加在特定相册中但不在其他相册中的照片?
【发布时间】:2018-03-10 15:05:26
【问题描述】:

我想知道在 swift 和 xcode 中:如何删除添加到特定相册但不添加到其他相册的照片。例如添加在相机胶卷中但未添加到其他相册中的照片?我知道原则上,苹果将其仅作为其他相册中相机胶卷中同一张照片的参考链接,因此如果删除一个,您将删除所有其他相册。但是有可能绕过它吗?例如将其作为文件副本复制到具有不同名称的新专辑中? 任何人都知道如何解决它?

谢谢,

【问题讨论】:

  • 您能更具体地谈谈您的问题吗?您是否正在尝试构建照片查看器应用程序?到目前为止,您尝试过什么?
  • 另外,“删除命令”是什么意思?这和 cocos2d-iphone 有什么关系?
  • 我想知道如何删除一张照片而不是从其他相册中删除它。
  • 你可能想改变你的问题,因为它不是很清楚你想要完成什么,而不是为什么 xcode 或 cocos2d-iphone 是相关的。如果更清楚,您将获得更多人回答的机会:stackoverflow.com/help/how-to-ask

标签: ios swift xcode cocos2d-iphone


【解决方案1】:

您可以使用Photos 框架从特定相册中删除照片。您需要该相册的PHAssetCollection 对象(例如album)和属于该相册的照片的PHAsset(例如asset)。

为了从特定专辑中删除资产,您需要使用album 创建PHAssetCollectionChangeRequest 对象(例如request),然后在request 的帮助下使用@ 方法删除asset 987654331@.

示例

let album : PHAssetCollection = /*Your album object*/
let asset : PHAsset = /*Your Asset belongs to album*/
PHPhotoLibrary.shared().performChanges({
        guard let request = PHAssetCollectionChangeRequest(for: album) else {
            return
        }
        request.removeAssets([asset] as NSArray)
    }) { (result, error) in
        print("completionBlock",result, error)
    }

【讨论】:

  • 但这会删除不同相册中的同一张照片吗?因为那张照片只有一个记录,但它只创建了一个“路径”或不同相册中的链接以供参考。因此,基本上,如果您从任何地方删除,它将仅删除一条记录,而其他所有引用它的地方将无法访问。我理解对了吗?
  • 如果您要删除带有PHAssetCollectionChangeRequest(for: ) 的照片。它只会修改资产集合的元数据,或者在添加或删除资产时不考虑它们的排列。因此,如果资产在不同的地方使用,它不会从存储中永久删除资产。
  • 那么我如何检查一张照片是否已经在另一个相册中被引用?这意味着如果我将相册中的照片添加到另一个相册,我如何在代码中检查?
  • 你对我上面的查询有什么意见吗?
  • PHAsset 类中没有实例方法来识别资产是否属于更多专辑,您必须编写自己的方法来检查同一资产的所有其他专辑。跨度>
【解决方案2】:

您可以像下面这样过滤所选专辑并删除专辑

  if let assetCollection = album.filter({$0 == selectedAlbum}).first?.collection{
     PHPhotoLibrary.shared().performChanges({
       PHAssetCollectionChangeRequest.deleteAssetCollections([assetCollection] as NSArray)
        }, completionHandler: { (success, error) in
            if success {
               //enter code here
               Print("Successfully Deleted")
             }
            else if error = error {
              //enter error handler code here
              print(error)
             }
         }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 2017-06-09
    • 2012-08-01
    • 2013-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多