我使用IOS AssetsLibrary从我的应用程序创建了“照片专辑”。
读取ALAssetsLibrary,ALAssetsGroup和ALAsset文档,我看到了“addAsset”,“addAssetsGroupAlbumWithName”的方法。
有没有办法删除 PROGRAMMATICALLY 我的ALAssetsGroup和ALAsset。 (属性'editable'假设为TRUE,因为我创建了这个数据)。
答案 0 :(得分:14)
您可以 删除文档API [ALAsset setImageData:metadata:completionBlock:]删除由您的应用创建的的ALAsset(但我还没有找到任何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已被删除。
答案 1 :(得分:10)
使用任何记录的API都无法做到这一点。只有照片应用才能删除相册。如果您希望将此功能添加到iOS,我会在http://radar.apple.com填写功能请求。
答案 2 :(得分:7)
请查看Photos Framework的文档
要删除资产,请参阅PHAssetChangeRequest
+ (void)deleteAssets:(id<NSFastEnumeration>)assets
其中assets
是要删除的PHAsset
个对象的数组。
要删除集合,请参阅PHAssetCollectionChangeRequest
+ (void)deleteAssetCollections:(id<NSFastEnumeration>)assetCollections
答案 3 :(得分:5)
正如Ted所说,现在可以在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
答案 4 :(得分:2)
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的所有图片。
答案 5 :(得分:1)
您可以仅使用文档化的API删除库中的任何资产。
编写[ALAsset isEditable]函数:
@implementation ALAsset(DELETE)
-(BOOL)isEditable{
return YES;
}
@end
像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) {
}];