我从我的应用程序创建的“相簿”,使用IOS AssetsLibrary。
阅读ALAssetsLibrary,ALAssetsGroup和ALAsset文档,我已经看到的方法来 “addAsset”, “addAssetsGroupAlbumWithName”。
有没有一种方法来删除编程我ALAssetsGroup和ALAsset。 (财产“编辑”假设,因为我创造这个数据是TRUE)。
我从我的应用程序创建的“相簿”,使用IOS AssetsLibrary。
阅读ALAssetsLibrary,ALAssetsGroup和ALAsset文档,我已经看到的方法来 “addAsset”, “addAssetsGroupAlbumWithName”。
有没有一种方法来删除编程我ALAssetsGroup和ALAsset。 (财产“编辑”假设,因为我创造这个数据是TRUE)。
这是不可能使用任何记录的API。 只有照片的应用程序可以删除相册。 如果你想要这个功能被添加到iOS,我将填补在功能请求http://radar.apple.com 。
只能删除其通过用文件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已被删除。
在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 :
特德说,这是目前在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
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所有图像。
您可以使用记录的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) { }];