- (IBAction)save
{
PHAuthorizationStatus oldStatus = [PHPhotoLibrary authorizationStatus];
// 判斷當前的授權狀態
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
// [[NSOperationQueue mainQueue] addOperationWithBlock:^{
// switch (status) {
// // 這是系統級別的限制(比如家長控制),用戶也無法修改這個授權狀態
// case PHAuthorizationStatusRestricted: {
// [SVProgressHUD showErrorWithStatus:@"由于系統原因,無法保存圖片!"];
// break;
// }
//
// // 用戶已經拒絕當前App訪問相片數據(說明用戶當初選擇了“Don't Allow”)
// case PHAuthorizationStatusDenied: {
// if (oldStatus != PHAuthorizationStatusNotDetermined) {
// XMGLog(@"提醒用戶去打開訪問開關")
// }
// break;
// }
//
// // 用戶已經允許當前App訪問相片數據(說明用戶當初選擇了“OK”)
// case PHAuthorizationStatusAuthorized: {
// [self saveImage];
// break;
// }
//
// default:
// break;
// }
// }];
dispatch_async(dispatch_get_main_queue(), ^{
switch (status) {
// 這是系統級別的限制(比如家長控制),用戶也無法修改這個授權狀態
case PHAuthorizationStatusRestricted: {
[SVProgressHUD showErrorWithStatus:@"由于系統原因,無法保存圖片!"];
break;
}
// 用戶已經拒絕當前App訪問相片數據(說明用戶當初選擇了“Don't Allow”)
case PHAuthorizationStatusDenied: {
if (oldStatus != PHAuthorizationStatusNotDetermined) {
XMGLog(@"提醒用戶去打開訪問開關")
}
break;
}
// 用戶已經允許當前App訪問相片數據(說明用戶當初選擇了“OK”)
case PHAuthorizationStatusAuthorized: {
[self saveImage];
break;
}
default:
break;
}
});
}];
}
/**
* 獲得當前App對應的【自定義相冊】
*/
- (PHAssetCollection *)createdCollection
{
// 抓取所有【自定義相冊】
PHFetchResult<PHAssetCollection *> *collections = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];
// 從Info.plist中獲得App名稱(也就是當前App的相冊名稱)
NSString *title = [NSBundle mainBundle].infoDictionary[(NSString *)kCFBundleNameKey];
for (PHAssetCollection *collection in collections) {
if ([collection.localizedTitle isEqualToString:title]) {
// 【自定義相冊】已經創建過
return collection;
}
}
__block NSString *collectionId = nil;
[[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{
// 創建【自定義相冊】
collectionId = [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:title].placeholderForCreatedAssetCollection.localIdentifier;
} error:nil];
// 根據id獲得剛剛創建完的相冊
return [PHAssetCollection fetchAssetCollectionsWithLocalIdentifiers:@[collectionId] options:nil].firstObject;
}
/**
* 保存圖片
*/
- (void)saveImage
{
// 凡是遵守NSFastEnumeration協議的對象,都可以使用for-in來遍歷, for-in的效率普通for循環高
// performChanges里面不能嵌套performChanges
// 獲得【自定義相冊】
PHAssetCollection *createdCollection = self.createdCollection;
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
// 保存圖片到【相機膠卷】
// createdAsset 就代表 剛才添加到【相機膠卷】中的圖片
PHObjectPlaceholder *createdAsset = [PHAssetChangeRequest creationRequestForAssetFromImage:self.imageView.image].placeholderForCreatedAsset;
// 將對應的相冊傳入,創建一個【相冊修改請求】對象
PHAssetCollectionChangeRequest *collectionChangeRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:createdCollection];
// 將保存到【相機膠卷】的圖片添加到【自定義相冊】
[collectionChangeRequest insertAssets:@[createdAsset] atIndexes:[NSIndexSet indexSetWithIndex:0]];
} completionHandler:^(BOOL success, NSError *error) {
if (success) {
[SVProgressHUD showSuccessWithStatus:@"保存成功!"];
} else {
[SVProgressHUD showErrorWithStatus:@"保存失敗!"];
}
}];
}
- (IBAction)back
{
[self dismissViewControllerAnimated:YES completion:nil];
}
ctasse
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
- 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
推薦閱讀更多精彩內容
- 在簡書的送書寫書評活動書單中,一眼就看中了這本書。于是立刻報了名,居然幸運的入選了。 《與父母和解——療愈關系中最...