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のみを削除できます(ただし、ALAssetGroup を削除する API は見つかりませんでした)。
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 では、Photos Framework を使用して写真を削除できる可能性があります。
Photos Framework のドキュメントを確認してください。
アセットの削除については、PHAssetChangeRequest を参照してください。
+ (void)deleteAssets:(id<NSFastEnumeration>)assets
は、削除するオブジェクトassets
の配列です。PHAsset
コレクションの削除については、PHAssetCollectionChangeRequest を参照してください。
+ (void)deleteAssetCollections:(id<NSFastEnumeration>)assetCollections
エヴァンチンは正しいです。さらに、Xamarin.iOS (モノタッチ) でこれを行う場合:
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
エバンチンが言ったように、アセットを削除します。
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) {
}];