1.請求訪問權限 2.保存圖片到默認相冊 3.新建自定義相冊,首先進行判斷是否有相冊 4.將默認相冊中保存的圖片進行引用到自定義相冊中.async
若是隻是保存圖片到默認相冊,3,4能夠不作.fetch
- (IBAction)save { PHAuthorizationStatus oldStatus = [PHPhotoLibrary authorizationStatus]; // 請求\檢查訪問權限 : // 若是用戶尚未作出選擇,會自動彈框,用戶對彈框作出選擇後,纔會調用block // 若是以前已經作過選擇,會直接執行block [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) { dispatch_async(dispatch_get_main_queue(), ^{ if (status == PHAuthorizationStatusDenied) { // 用戶拒絕當前App訪問相冊 if (oldStatus != PHAuthorizationStatusNotDetermined) { XMGLog(@"提醒用戶打開開關") } } else if (status == PHAuthorizationStatusAuthorized) { // 用戶容許當前App訪問相冊 [self saveImageIntoAlbum]; } else if (status == PHAuthorizationStatusRestricted) { // 沒法訪問相冊 [SVProgressHUD showErrorWithStatus:@"因系統緣由,沒法訪問相冊!"]; } }); }]; }
//保存圖片到默認相冊spa
- (PHFetchResult<PHAsset *> *)createdAssets { NSError *error = nil; __block NSString *assetID = nil; // 保存圖片到【相機膠捲】 [[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{ assetID = [PHAssetChangeRequest creationRequestForAssetFromImage:self.imageView.image].placeholderForCreatedAsset.localIdentifier; } error:&error]; if (error) return nil; // 獲取剛纔保存的相片 return [PHAsset fetchAssetsWithLocalIdentifiers:@[assetID] options:nil]; }
/** * 保存圖片到相冊 */ - (void)saveImageIntoAlbum { // 得到相片 PHFetchResult<PHAsset *> *createdAssets = self.createdAssets; if (createdAssets == nil) { [SVProgressHUD showErrorWithStatus:@"保存圖片失敗!"]; return; } // 得到相冊 PHAssetCollection *createdCollection = self.createdCollection; if (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:@"保存圖片成功!"]; } }
#pragma mark - 得到當前App對應的自定義相冊 - (PHAssetCollection *)createdCollection { // 得到軟件名字 NSString *title = [NSBundle mainBundle].infoDictionary[(__bridge NSString *)kCFBundleNameKey]; // 抓取全部的自定義相冊 PHFetchResult<PHAssetCollection *> *collections = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil]; // 查找當前App對應的自定義相冊 for (PHAssetCollection *collection in collections) { if ([collection.localizedTitle isEqualToString:title]) { return collection; } } /** 當前App對應的自定義相冊沒有被建立過 **/ // 建立一個【自定義相冊】 NSError *error = nil; __block NSString *createdCollectionID = nil; [[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{ createdCollectionID = [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:title].placeholderForCreatedAssetCollection.localIdentifier; } error:&error]; if (error) return nil; // 根據惟一標識得到剛纔建立的相冊 return [PHAssetCollection fetchAssetCollectionsWithLocalIdentifiers:@[createdCollectionID] options:nil].firstObject; }