你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS編程技術 >> iOS 添加圖片到自定義相冊

iOS 添加圖片到自定義相冊

編輯:IOS編程技術

 

將一張圖片添加到自定義相冊分為三步

第一步.添加圖片到【相機膠卷】(三種方法)
 1> UIImageWriteToSavedPhotosAlbum函數(只能添加到【相機膠卷】不推薦)
 2> AssetsLibrary框架(已過期)
 3> Photos框架(推薦)
 
 第二步.擁有一個【自定義相冊】(兩種方法)
 1> AssetsLibrary框架(已過期)
 2> Photos框架(推薦)
 
 第三步.將剛才添加到【相機膠卷】的圖片,引用(添加)到【自定義相冊】(兩種方法)
 1> AssetsLibrary框架(已過期)
 2> Photos框架(推薦)

 Photos框架須知

 1.PHPhotoLibrary類:代表用戶的相片庫  

 1.1>對相片的增刪改操作必須要使用這個類的對象方法

                                                                                                                                                                          
 2.PHAsset : 一個PHAsset對象代表一張圖片或者一個視頻文件
 2.1> 負責查詢一堆的PHAsset對象


 3.PHAssetCollection : 一個PHAssetCollection對象代表一個相冊
 3.1> 負責查詢一堆的PHAssetCollection對象
 
 4.PHAssetChangeRequest
 4.1> 負責執行對PHAsset的【增刪改】操作
 4.2> 這個類只能放在-[PHPhotoLibrary performChanges:completionHandler:] 或者 -[PHPhotoLibrary performChangesAndWait:error:]方法的block中使用
 
 5.PHAssetCollectionChangeRequest
 5.1> 負責執行對PHAssetCollection的【增刪改】操作
 5.2> 這個類只能放在-[PHPhotoLibrary performChanges:completionHandler:] 或者 -[PHPhotoLibrary performChangesAndWait:error:]方法的block中使用

下面我們將使用Photos框架實現此功能

 

1.添加圖片到相機膠卷相冊

 - (PHFetchResult<PHAsset *> *)createdAssets
 {
     __block NSString *createdAssetId = nil;
     
     // 添加圖片到【相機膠卷】
     [[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{
         createdAssetId = [PHAssetChangeRequest creationRequestForAssetFromImage:self.imageView.image].placeholderForCreatedAsset.localIdentifier;
     } error:nil];
     
     if (createdAssetId == nil) return nil;
     
     // 在保存完畢後取出圖片
     return [PHAsset fetchAssetsWithLocalIdentifiers:@[createdAssetId] options:nil];
 }

2.獲得自定義相冊

 - (PHAssetCollection *)createdCollection
 {
     // 獲取軟件的名字作為相冊的標題
     NSString *title = [NSBundle mainBundle].infoDictionary[(NSString *)kCFBundleNameKey];
     
     // 獲得所有的自定義相冊
     PHFetchResult<PHAssetCollection *> *collections = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];
     for (PHAssetCollection *collection in collections) {
         if ([collection.localizedTitle isEqualToString:title]) {
             return collection;
         }
     }
     
     // 代碼執行到這裡,說明還沒有自定義相冊
     
     __block NSString *createdCollectionId = nil;
     
     // 創建一個新的相冊
     [[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{
         createdCollectionId = [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:title].placeholderForCreatedAssetCollection.localIdentifier;
     } error:nil];
     
     if (createdCollectionId == nil) return nil;
     
     // 創建完畢後再取出相冊
     return [PHAssetCollection fetchAssetCollectionsWithLocalIdentifiers:@[createdCollectionId] options:nil].firstObject;
 }

 

3.將相機膠卷相冊的圖片引用到自定義相冊

 - (void)saveImageIntoAlbum
 {
     // 執行步驟1 獲得相片
     PHFetchResult<PHAsset *> *createdAssets = self.createdAssets;
     
     // 執行步驟2.獲得自定義相冊
     PHAssetCollection *createdCollection = self.createdCollection;
     
     if (createdAssets == nil || createdCollection == nil) {
         [SVProgressHUD showErrorWithStatus:@"保存失敗!"];
         return;
     }
     
     // 將相片添加到相冊
     NSError *error = nil;
     [[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{
         PHAssetCollectionChangeRequest *request = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:createdCollection];
         [request insertAssets:createdAssets atIndexes:[NSIndexSet indexSetWithIndex:0]];
     } error:&error];
     
     // 保存結果
     if (error) {
         [SVProgressHUD showErrorWithStatus:@"保存失敗!"];
     } else {
         [SVProgressHUD showSuccessWithStatus:@"保存成功!"];
     }
 }


補充:requestAuthorization方法

[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
    }];

1.如果用戶還沒有做過選擇,這個方法就會彈框讓用戶做出選擇是否允許訪問相冊

1.1 用戶做出選擇以後才會回調block

2.如果用戶之前已經做過選擇,這個方法就不會再彈框,直接回調block,傳遞現在的授權狀態給block

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved