【问题标题】:How to remove an asset from album without deleting the asset/photo from the photos app?如何在不从照片应用程序中删除资产/照片的情况下从相册中删除资产?
【发布时间】:2015-02-06 03:55:59
【问题描述】:

我想以编程方式从重复的相册中删除资产(照片不是)。我可以使用 Photos 框架删除相册

我想知道如何在不从照片应用程序中完全删除的情况下从相册中删除资产。我想在多个地方使用它,例如将资产从一张专辑移动到另一张专辑等

相册在我创建时是可编辑的。

有没有办法在装有 iOS 6 或 iOS 7 的设备上执行此操作?

【问题讨论】:

    标签: ios objective-c alassetslibrary photosframework


    【解决方案1】:

    在 iOS 8 及更高版本中,您可以使用以下代码从相册中删除照片,而无需从照片应用程序中完全删除照片。

    [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
        PHAssetCollectionChangeRequest *request = [PHAssetCollectionChangeRequest
            changeRequestForAssetCollection:self.myAlbum
                                     assets:self.albumAssetsFetchResult];
        [request removeAssets:@[asset]];
    
    } completionHandler:^(BOOL success, NSError *error) {
        NSLog(@"Finished removing asset from the album. %@", (success ? @"Success" : error));
    }];
    

    代码在以下链接中提供: https://developer.apple.com/library/prerelease/ios/documentation/Photos/Reference/PHAssetCollectionChangeRequest_Class/index.html

    【讨论】:

      【解决方案2】:

      Tgiri 的 Swift 4 版本的答案,如果它对任何人都有帮助的话:

      // you want to pass in your asset collection and asset
      let album: PHAssetCollection 
      let asset: PHAsset
      
      PHPhotoLibrary.shared().performChanges({
                  guard let albumChangeRequest = PHAssetCollectionChangeRequest(for: album) else { return }
                  let fastEnumeration = NSArray(array: [asset])
                  albumChangeRequest.removeAssets(fastEnumeration)
              }, completionHandler: { success, error in
              if success {
                  print("removed")
              } else {
                  print("not removed")
              }
          })
      

      【讨论】:

        【解决方案3】:

        您可以将该图像的imageData设置为零,这样您就可以删除图像。

        ALAssetsLibrary *lib = [ALAssetsLibrary new];
        [lib enumerateGroupsWithTypes:ALAssetsGroupAlbum usingBlock:^(ALAssetsGroup *group, BOOL *stop)
        {
             if(group == nil)
             {
                  return ;
             }
        
             if([[group valueForProperty:ALAssetsGroupPropertyName] isEqualToString:@"YourAlbumNam"])
            {
                [group enumerateAssetsUsingBlock:^(ALAsset *asset, NSUInteger index, BOOL *stop)
                {
                     if(asset.isEditable)
                     {
                         if([[asset valueForProperty:ALAssetPropertyAssetURL] isEqual:yourAssetURL] )
                         {
                               [asset setImageData:nil metadata:nil completionBlock:^(NSURL *assetURL, NSError *error)
                               {
                                     // Check for error
                               }];
                         }
                      }
                }];
            }                
        failureBlock:^(NSError *error)
        {
        
        }];
        

        【讨论】:

        • 我不想删除该资产。我只想从相册中删除它。它应该存在于相机胶卷中
        • @ShravyaBoggarapu:它应该存在于相机胶卷中,我只是将它从相册中删除。你试过那个代码吗?
        • 它不工作。并且检索到的东西资产不可编辑,这就是它没有进一步发展的原因。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多