我使用 IOS AssetsLibrary 从我的应用程序创建了“相册”。
阅读 ALAssetsLibrary、ALAssetsGroup 和 ALAsset 文档,我看到了“addAsset”、“addAssetsGroupAlbumWithName”的方法。
有没有办法以编程方式删除我的 ALAssetsGroup 和 ALAsset。(属性“可编辑”假设为 TRUE,因为我创建了此数据)。
我使用 IOS AssetsLibrary 从我的应用程序创建了“相册”。
阅读 ALAssetsLibrary、ALAssetsGroup 和 ALAsset 文档,我看到了“addAsset”、“addAssetsGroupAlbumWithName”的方法。
有没有办法以编程方式删除我的 ALAssetsGroup 和 ALAsset。(属性“可编辑”假设为 TRUE,因为我创建了此数据)。
您只能使用文档 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 已被删除。
使用任何记录在案的 API 都无法做到这一点。只有照片应用可以删除相册。如果您希望将此功能添加到 iOS,我会在https://feedbackassistant.apple.com/填写功能请求。
在 ios8 中,可以使用照片框架删除照片
请查看照片框架的文档
如需删除资产,请参阅 PHAssetChangeRequest
+ (void)deleteAssets:(id<NSFastEnumeration>)assets
where是要删除assets
的对象数组。PHAsset
要删除集合,请参阅 PHAssetCollectionChangeRequest
+ (void)deleteAssetCollections:(id<NSFastEnumeration>)assetCollections
正如 Ted 所说,这现在可以在 iOS 8 中使用 Photos 服务。其实挺干净的。您需要向照片库提交更改请求。这是一个例子。
[[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
伊万钦是正确的。此外,如果您想在 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 的所有图像。
您只能使用文档化 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) {
}];