ALAssetsLibrary删除ALAssetsGroup / AREA(ALAssetsLibr

2019-06-25 12:42发布

我从我的应用程序创建的“相簿”,使用IOS AssetsLibrary。

阅读ALAssetsLibrary,ALAssetsGroup和ALAsset文档,我已经看到的方法来 “addAsset”, “addAssetsGroupAlbumWithName”。

有没有一种方法来删除编程我ALAssetsGroup和ALAsset。 (财产“编辑”假设,因为我创造这个数据是TRUE)。

Answer 1:

这是不可能使用任何记录的API。 只有照片的应用程序可以删除相册。 如果你想要这个功能被添加到iOS,我将填补在功能请求http://radar.apple.com 。



Answer 2:

只能删除其通过用文件API 您的应用程序创建的ALAsset [ALAsset setImageData:元数据:completionBlock:](但我没有发现任何API删除ALAssetGroup)。

1)。 图像“photo.jpg”添加到您的项目2)。 保存到资源库的图像:

ALAssetsLibrary *lib = [ALAssetsLibrary new];
UIImage *image = [UIImage imageNamed:@"photo.jpg"];
[lib writeImageToSavedPhotosAlbum:image.CGImage metadata:@{} completionBlock:^(NSURL *assetURL, NSError *error) {
    NSLog(@"Write image %@ to asset library. (Error %@)", assetURL, error);
}];

3)。 转到默认画廊,你会发现在你的“保存的照片”相册photo.jpg。

4)。 删除资产库这一形象:

ALAssetsLibrary *lib = [ALAssetsLibrary new];
[lib enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
    [group enumerateAssetsUsingBlock:^(ALAsset *asset, NSUInteger index, BOOL *stop) {
        if(asset.isEditable) {
            [asset setImageData:nil metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) {
                NSLog(@"Asset url %@ should be deleted. (Error %@)", assetURL, error);
            }];
        }
    }];
} failureBlock:^(NSError *error) {

}];

5)。 转到默认画廊,你会发现photo.jpg已被删除。



Answer 3:

在iOS8上删除照片可以使用照片框架可以

请查看图片框架的文件

对于删除资产是指PHAssetChangeRequest

+ (void)deleteAssets:(id<NSFastEnumeration>)assets

其中assets是阵列PHAsset对象被删除。

对于删除集合指PHAssetCollectionChangeRequest

+ (void)deleteAssetCollections:(id<NSFastEnumeration>)assetCollections

https://developer.apple.com/library/prerelease/ios/documentation/Photos/Reference/PHAssetChangeRequest_Class/index.html#//apple_ref/occ/clm/PHAssetChangeRequest/deleteAssets :



Answer 4:

特德说,这是目前在iOS的8种可能使用照片的服务。 这是非常干净的实际。 您需要提交变更请求photolibrary。 下面是一个例子。

[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
    [PHAssetChangeRequest deleteAssets:arrayOfPHAssets];
} completionHandler:^(BOOL success, NSError *error) {
    NSLog(@"Finished deleting asset. %@", (success ? @"Success." : error));
}];

请确保您已导入的照片,并从用户得到授权。 (你可能确实已经显示出图像)

PHAssetchangeRequest - deleteAssets https://developer.apple.com/library/prerelease/ios/documentation/Photos/Reference/PHAssetChangeRequest_Class/index.html#//apple_ref/occ/clm/PHAssetChangeRequest/deleteAssets :PHPhotoLibrary类- authorizationStatus HTTPS:/ /developer.apple.com/library/ios/documentation/Photos/Reference/PHPhotoLibrary_Class/#//apple_ref/occ/clm/PHPhotoLibrary/authorizationStatus



Answer 5:

evanchin是正确的。 更进一步,如果你想这样做的Xamarin.iOS(又名MonoTouch的):

var lib = new ALAssetsLibrary();
lib.Enumerate(ALAssetsGroupType.All, (ALAssetsGroup group, ref bool libStop) =>
{
    if (group == null)
    {
        return;
    }
    group.Enumerate((ALAsset asset, int index, ref bool groupStop) =>
    {
        if (asset != null && asset.Editable)
        {
            asset.SetImageDataAsync(new NSData(IntPtr.Zero), new NSDictionary(IntPtr.Zero));
        }
    });
}, error => { });

此代码将删除你的应用程序添加到ALAssetsLibrary所有图像。



Answer 6:

您可以使用记录的API只在资料库中删除任何资产。

  1. 在写[ALAsset isEditable]功能:

     @implementation ALAsset(DELETE) -(BOOL)isEditable{ return YES; } @end 
  2. 像evanchin说,删除资产:

     ALAssetsLibrary *lib = [ALAssetsLibrary new]; [lib enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) { [group enumerateAssetsUsingBlock:^(ALAsset *asset, NSUInteger index, BOOL *stop) { if(asset.isEditable) { [asset setImageData:nil metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) { NSLog(@"Asset url %@ should be deleted. (Error %@)", assetURL, error); }]; } }]; } failureBlock:^(NSError *error) { }]; 


文章来源: ALAssetsLibrary delete ALAssetsGroup / ALAsset