0

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

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

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

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

4

3 回答 3

2

在 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

于 2015-08-10T13:53:44.800 回答
2

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

// 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")
        }
    })
于 2018-02-27T00:45:17.777 回答
0

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

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)
{

}];
于 2015-02-06T04:11:50.143 回答