2017-05-20 13 views
1

私は、ユーザがプログラムで写真で作成したカスタムアルバムに画像として図面を保存する図面アプリケーションを作っています。私はこれらの保存された画像を削除したい、私はどのようにカスタムアルバムから画像を削除することができます教えてください。iOSのカスタムアルバムからプログラムでプログラムを削除するにはどうすればよいですか?

ありがとうございました。

+0

イメージの保存にSQLiteまたはCore Dataを使用していますか? – user3182143

+0

私はデータベースやコアデータを使用しません。私は、写真ライブラリのユーザーのためにプログラムでカスタムアルバムを作成し、そのアルバムの画像を保存し、それらの画像をコレクションビューで表示しています。私は写真ライブラリからそのカスタムアルバムから任意の選択された画像をプログラム的に削除したいと思います。 –

+0

アセット削除機能をお試しください。 deleteAssets(_ :) https://developer.apple.com/reference/photos/phassetchangerequest/1624062-deleteassets – arundevma

答えて

1
それは動作します

インポートアサートライブラリ#import <AssetsLibrary/AssetsLibrary.h>

まず最初に取得し、あなたが保存された画像のパスを取得

ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; 

[library writeImageToSavedPhotosAlbum:[[UIImage imageNamed:@"Dhoni.jpg"] CGImage] orientation:(ALAssetOrientation)[[UIImage imageNamed:@"Dhoni.jpg"] imageOrientation] completionBlock:^(NSURL *assetURL, NSError *error){ 
    if (error) { 
     NSLog(@"error"); 
    } else { 
     NSLog(@"url %@", assetURL); 
    } 
}]; 
のために、このコードの下に使用することができます任意のデータベース

に店舗イメージパスすべきです

その後、パスを使用して画像を削除できます

NSURL *deleteurl = [NSURL URLWithString: assetURL]; 
NSArray *arrDelete = [[NSArray alloc] initWithObjects:deleteurl , nil]; 
PHFetchResult *asset = [PHAsset fetchAssetsWithALAssetURLs:arrDelete options:nil]; 

[asset enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
    NSLog(@"%@",[obj class]); 
    [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ 
     BOOL req = [obj canPerformEditOperation:PHAssetEditOperationDelete]; 
     if (req) { 
      NSLog(@"true"); 
      [PHAssetChangeRequest deleteAssets:@[obj]]; 
     } 
    } completionHandler:^(BOOL success, NSError *error) { 
     NSLog(@"Finished Delete asset. %@", (success ? @"Success." : error)); 
     if (success) { 
      NSLog(@"delete successfully"); 
     }else{ 
      NSLog(@"delete Cancel"); 

     } 
    }]; 

}]; 
+0

正常に動作していません.... –

0

削除カスタムアルバム

上記IOS 10と:

注:ユーザーがポップアップ確認を取得します。

__block PHFetchResult *photosAsset; 
     __block PHAssetCollection *collection; 
     __block PHObjectPlaceholder *placeholder; 

// Find the album 
PHFetchOptions *fetchOptions = [[PHFetchOptions alloc] init]; 
NSString * collectionTitle = //.. the custom album name 
fetchOptions.predicate = [NSPredicate predicateWithFormat:@"title = %@", collectionTitle]; 
// this is how we get a match for album Title held by 'collectionTitle' 



NSArray * collections = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAny options:fetchOptions]; 


[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ 


    [collections enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
     NSLog(@"Item %li = %@", (unsigned long)idx, obj); 
     [PHAssetCollectionChangeRequest deleteAssetCollections:@[obj]]; 
    }]; 




} completionHandler:^(BOOL success, NSError *error) { 

    if (success) 
    {     
     NSLog(@"success"); 
     NSLog(@"placeholder holds %@", placeholder.debugDescription); 

    } 
    else 
    { 
     NSLog(@"%@", error); 
    } 

}]; 
+0

ありがとうございます。ポップアップ確認を無効にすることができるかどうか教えてください。 –

+0

@ KanikaMishra申し訳ありませんが、Appleシステムのユーザーの確認であるポップアップを無効にすることはできません。 –

関連する問題