iOS 刪除相冊中照片--來自簡書


來自:http://www.jianshu.com/p/ac18aa3f28c2

最近公司的app有一個新功能是在app中刪除相冊的照片 ,本來是一個比較簡單地功能,在做的過程中卻發現AssetsLibary 框架並沒有提供刪除相冊的API,網絡上查找的時候這方面的信息也很少,最終在stackoverflow上發現了一個巧妙的方法,使用[ALAsset setImageData:metadata:completionBlock:]來實現刪除照片的功能,可是也有人說這個API雖然能刪除照片,但是它的主要功能不是用來刪除照片,在iOS8的時候再只用它刪除照片就無效了。好在iOS8中我們可以直接使用 PhotoKit框架來完成操作,PhotoKit中直接提供了 [PHAssetChangeRequest deleteAssets:@[Asset]]API來完成對照片的刪除功能。接下來我們介紹一下這兩個照片庫框架如何刪除照片。

在以前的iOS App中中我們通常用AssetsLibary框架來完成對照片庫的操作,但是隨着iOS 系統的更新,蘋果在相機和照片庫上都發生了很大的改變,比如最新的iOS9系統中會有單獨的自拍、屏幕快照相冊,現在僅僅使用AssetsLibary並不能對照片庫進行很好地支持。在iOS8中Apple提供了新的框架 PhotoKit,相比老舊的AssetsLibary,PhotoKit表現的更好,更能完成設備和照片庫的無縫工作。但是在現在的蘋果用戶中,iOS7系統還是占有很大的比例,所以AssetsLibary仍然具有使用意義。

AssetsLibary刪除照片(用於iOS7)

1.在相冊中添加一張照片

    ALAssetsLibrary *lib = [[ALAssetsLibrary alloc]init];
    UIImage *image = [UIImage imageNamed:@"pet"]; [lib writeImageToSavedPhotosAlbum:image.CGImage metadata:@{} completionBlock:^(NSURL *assetURL, NSError *error) { NSLog(@"Write image(%@) to album . Error:(%@)", assetURL, error); }];

2.在相冊中刪除照片

    ALAssetsLibrary *lib = [[ALAssetsLibrary alloc]init];
    [lib enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) { [group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) { if (result.isEditable) { //在這里imageData 和 metaData設為nil,就可以將相冊中的照片刪除 [result setImageData:nil metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) { NSLog(@"asset url(%@) should be delete . Error:%@ ", assetURL, error); }]; } }]; } failureBlock:^(NSError *error) { }];

PhotoKit 刪除照片(用於iOS8, iOS9)

1.在相冊中添加一張照片

    //首先獲取相冊的集合 PHFetchResult *collectonResuts = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAny options:[PHFetchOptions new]] ; //對獲取到集合進行遍歷 [collectonResuts enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { PHAssetCollection *assetCollection = obj; //Camera Roll是我們寫入照片的相冊 if ([assetCollection.localizedTitle isEqualToString:@"Camera Roll"]) { [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ //請求創建一個Asset PHAssetChangeRequest *assetRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:[UIImage imageNamed:@"pet"]]; //請求編輯相冊 PHAssetCollectionChangeRequest *collectonRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:assetCollection]; //為Asset創建一個占位符,放到相冊編輯請求中 PHObjectPlaceholder *placeHolder = [assetRequest placeholderForCreatedAsset ]; //相冊中添加照片 [collectonRequest addAssets:@[placeHolder]]; } completionHandler:^(BOOL success, NSError *error) { NSLog(@"Error:%@", error); }]; } }];

2.在相冊中刪除照片

    PHFetchResult *collectonResuts = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAny options:[PHFetchOptions new]] ;
    [collectonResuts enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { PHAssetCollection *assetCollection = obj; if ([assetCollection.localizedTitle isEqualToString:@"Camera Roll"]) { PHFetchResult *assetResult = [PHAsset fetchAssetsInAssetCollection:assetCollection options:[PHFetchOptions new]]; [assetResult enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ //獲取相冊的最后一張照片 if (idx == [assetResult count] - 1) { [PHAssetChangeRequest deleteAssets:@[obj]]; } } completionHandler:^(BOOL success, NSError *error) { NSLog(@"Error: %@", error); }]; }]; } }];

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM