1狠怨、C語言方法
在需要保存圖片的代碼中調用下列方法即可
UIImageWriteToSavedPhotosAlbum(self.imageView.image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
注意:在上訴select方法中必須要按規(guī)定調用下列方法才可以坑资,不可以自定義方法运敢,否則會編譯報錯
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
{
if (error) {
[SVProgressHUD showErrorWithStatus:@"圖片保存失斝B亍!4荨迄沫!"];
} else {
[SVProgressHUD showSuccessWithStatus:@"圖片保存成功!"];
}
}
2涉枫、Photos庫
PHAsset:一張相片或者一個視頻
PHAssetCollection:一個相冊
相片和相冊的操作共有4中情況:增刪改查邢滑,其中增刪改歸納為1類,查歸納為1類;
所有的增刪改操作都需要在-[PHPhotoLibrary performChanges:] 或者 -[PHPhotoLibrary performChangesAndWait:] block方法中執(zhí)行困后,否者會編譯報錯
用戶保存一張圖片到自定義相冊代碼示例
// 獲取保存到相冊的圖片
PHFetchResult<PHAsset *> *createdAssets = [self createdAssets];
if (createdAssets == nil) {
[SVProgressHUD showErrorWithStatus:@"保存圖片失敗!!!"];
return;
}
// 查找自定義相冊
PHAssetCollection *collect = [self createdCollection];
if (collect == nil) {
[SVProgressHUD showErrorWithStatus:@"自定義相冊創(chuàng)建失敗"];
return;
}
// 保存圖片到自定義相冊
[[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{
PHAssetCollectionChangeRequest *request = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:collect];
[request insertAssets:createdAssets atIndexes:[NSIndexSet indexSetWithIndex:0]];
} error:&error];
if (error) {
[SVProgressHUD showErrorWithStatus:@"保存圖片到自定義相冊失敗"];
} else {
[SVProgressHUD showSuccessWithStatus:@"保存圖片到自定義相冊成功"];
}
查找自定義相冊方法乐纸,如果自定義相冊不存在,則創(chuàng)建一個自定義相冊并返回
- (PHAssetCollection *)createdCollection
{
// 取出軟件名稱
NSString *title = [NSBundle mainBundle].infoDictionary[(NSString *)kCFBundleNameKey];
// 獲取相冊集
PHFetchResult<PHAssetCollection *> *collects = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];
// 遍歷相冊集摇予,查找自定義相冊
for (PHAssetCollection *collect in collects) {
if ([collect.localizedTitle isEqualToString:title]) {
return collect;
}
}
NSError *error = nil;
__block NSString * createdcollectID = nil;
// 遍歷相冊集沒有找到自定義相冊汽绢,創(chuàng)建一個自定義相冊
[[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{
// 創(chuàng)建一個自定義相冊,并返回Identifier
createdcollectID = [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:title].placeholderForCreatedAssetCollection.localIdentifier;
} error:&error];
if (error) {
return nil;
} else {
[SVProgressHUD showSuccessWithStatus:@"相冊創(chuàng)建成功"];
}
// 通過相冊的Identifier快速遍歷相冊集并返回相冊
return [PHAssetCollection fetchAssetCollectionsWithLocalIdentifiers:@[createdcollectID] options:nil].firstObject;
}
獲取保存到相冊的圖片方法侧戴,保存圖片到相冊并返回圖片
- (PHFetchResult<PHAsset *> *)createdAssets
{
NSError *error = nil;
__block NSString * assetID = nil;
[[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{
// 保存圖片宁昭,并獲取保存圖片的Identifier
assetID = [PHAssetChangeRequest creationRequestForAssetFromImage:self.imageView.image].placeholderForCreatedAsset.localIdentifier;
} error:&error];
if (error) {
return nil;
}
// 通過圖片的Identifier快速遍歷圖片并返回圖片
return [PHAsset fetchAssetsWithLocalIdentifiers:@[assetID] options:nil];
}
注意事項,在保存圖片的時候需要確定是否有判斷APP是否有權限訪問相冊酗宋,可調用以下方法根據返回狀態(tài)進行判斷
(void)requestAuthorization:(void(^)(PHAuthorizationStatus status))handler