iOS中怎么存儲照片到自定義相冊


在市場上主流App中,大多數App都具有存儲圖片到自己App的相冊中.蘋果提供的方法只能存儲圖片到系統相冊,下面講一下怎么實現:

實現思路:

   1.對系統相冊進行操作的前提必須導入#import <Photos/Photos.h>

     2.在用戶點擊保存之后,首先判斷用戶是否允許App訪問相冊.若不是不可以,提醒用戶需要打開權限.

     3.進入用戶相冊之后,首先判斷有沒有改App儲存圖片的相冊,有的話直接把圖片存儲進去,沒有的話創建一個新的相冊.

     4.在圖片存儲到相冊的時候用到占位圖片.

具體實現:

    // 1.獲取用戶授權狀態,狀態有四種

    // 1) PHAuthorizationStatusNotDetermined  不確定

    // 2)  PHAuthorizationStatusRestricted, 家長控制,拒絕

    // 3)  PHAuthorizationStatusDenied, 拒絕

    // 4) PHAuthorizationStatusAuthorized 授權

    PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];

 // 2.判斷用戶的授權狀態

    if (status == PHAuthorizationStatusNotDetermined) {

            // 如果狀態是不確定的話,block中的內容會等到授權完成再調用

        [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {

            // 授權完成就會調用

            if (status == PHAuthorizationStatusAuthorized) {

      //調用存儲圖片的方法

                [self savePhoto];

            }

        }];

        //如果允許訪問

    } else if (status == PHAuthorizationStatusAuthorized) {

   //調用存儲圖片的方法

        [self savePhoto];

        //如果權限是拒絕

    } else {

        // 使用第三方框架,彈出一個頁面提示用戶去打開授權

       // [SVProgressHUD showInfoWithStatus:@"進入設置界面->找到當前應用->打開允許訪問相冊開關"];

    }

 

    #pragma mark - 該方法獲取在圖庫中是否已經創建該App的相冊

  //該方法的作用,獲取系統中所有的相冊,進行遍歷,若是已有相冊,返回該相冊,若是沒有返回nil,參數為需要創建  的相冊名稱

     - (PHAssetCollection *)fetchAssetColletion:(NSString *)albumTitle

    {

             // 獲取所有的相冊

             PHFetchResult *result = [PHAssetCollection           fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];

    //遍歷相冊數組,是否已創建該相冊

    for (PHAssetCollection *assetCollection in result) {

        if ([assetCollection.localizedTitle isEqualToString:albumTitle]) {

            return assetCollection;

        }

    }

    return nil;

 }

 

   #pragma mark - 保存圖片的方法

   - (void)savePhoto

  {

  //修改系統相冊用PHPhotoLibrary單粒,調用performChanges,否則蘋果會報錯,並提醒你使用

    [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{

        

        // 調用判斷是否已有該名稱相冊

       PHAssetCollection *assetCollection = [self fetchAssetColletion:

@"百思"];

        //創建一個操作圖庫的對象

        PHAssetCollectionChangeRequest *assetCollectionChangeRequest;

        

        if (assetCollection) {

            // 已有相冊

            assetCollectionChangeRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:assetCollection];

        } else {

            // 1.創建自定義相冊

            assetCollectionChangeRequest = [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:@"百思"];

        }

        

        // 2.保存你需要保存的圖片到系統相冊(這里保存的是_imageView上的圖片)

        PHAssetChangeRequest *assetChangeRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:_imageView.image];

        

        // 3.把創建好圖片添加到自己相冊

   //這里使用了占位圖片,為什么使用占位圖片呢

  //這個block是異步執行的,使用占位圖片先為圖片分配一個內存,等到有圖片的時候,再對內存進行賦值

        PHObjectPlaceholder *placeholder = [assetChangeRequest placeholderForCreatedAsset];

        [assetCollectionChangeRequest addAssets:@[placeholder]];

        

        

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

        //彈出一個界面提醒用戶是否保存成功

        if (error) {

            //[SVProgressHUD showErrorWithStatus:@"保存失敗"];

        } else {

           // [SVProgressHUD showSuccessWithStatus:@"保存成功"];

        }

        

        

    }];

}

 

 

     


免責聲明!

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



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