6

IOS AssetsLibrary を使用して、アプリから「写真アルバム」を作成しました。

ALAssetsLibrary、ALAssetsGroup、および ALAsset のドキュメントを読んで、「addAsset」、「addAssetsGroupAlbumWithName」のメソッドを見てきました。

ALAssetsGroup と ALAsset をプログラムに削除する方法はありますか。(このデータを作成するため、プロパティ「編集可能」はTRUEであると想定されます)。

4

6 に答える 6

14

ドキュメント 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 が既に削除されていることがわかります。

于 2013-11-29T06:25:55.010 に答える
10

これは、文書化された API を使用して行うことはできません。アルバムを削除できるのは写真アプリだけです。この機能を iOS に追加してほしい場合は、https://feedbackassistant.apple.com/で機能リクエストに記入します。

于 2012-06-15T22:28:58.187 に答える
7

iOS8 では、Photos Framework を使用して写真を削除できる可能性があります。

Photos Framework のドキュメントを確認してください。

アセットの削除については、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 :

于 2014-06-23T10:21:55.983 に答える
2

エヴァンチンは正しいです。さらに、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 に追加したすべての画像を削除します。

于 2014-04-27T15:20:53.077 に答える
1

文書化された API のみを使用して、ライブラリ内のアセットを削除できます。

  1. [ALAsset isEditable] 関数の上書き:

    @implementation ALAsset(DELETE)
    -(BOOL)isEditable{
        return YES;
    }
    @end
    
  2. エバンチンが言ったように、アセットを削除します。

    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) {
    
     }];
    
于 2014-05-14T11:03:10.610 に答える