存圖片,思路分析:
首先自定義一個保存圖片的文件夾
然后判斷文件是否創建成功,如果創建成功則直接保存圖片(先把圖片保存到【相 冊膠卷】中,在保存到自定義相冊文件夾中)。
假如文件創建失敗,即文件已經存在。那么遍歷相冊中的所有文件,當找到以前創建的文件夾,保存圖片。如果遍歷完所有文件,依然沒找到自定義的文件夾,則表示此文件夾被用戶誤刪了,則特殊處理文件夾名(一般在文件夾名后加一個空格),重寫創建一個文件夾,再保存圖片,這樣創建出來的文件夾名在相冊中外觀上和以前的一樣,因為蘋果系統會自動忽略文件名前后的空格。
#import <SVProgressHUD.h>
@interface LSLSeeBigPictureViewController ()
@property(nonatomic,weak)UIImageView *imageView;
@property(nonatomic,strong)ALAssetsLibrary *library; // 圖片文件
@end
@implementation LSLSeeBigPictureViewController
- (ALAssetsLibrary *)library {
if (!_library) {
_library = [[ALAssetsLibrary alloc] init];
}
return _library;
}
#pragma mark - 保存圖片
static NSString * const LSLDefaultGroupName = @"龍少相冊";
static NSString * const LSLGroupNameKey = @"LSLGroupNameKey";
// 從沙盒中獲取相冊文件名
- (NSString *)getGropName {
NSString *groupName = [[NSUserDefaults standardUserDefaults] stringForKey:LSLGroupNameKey];
if (groupName == nil) {
groupName = LSLDefaultGroupName;
// 把文件名保存到沙盒中
[[NSUserDefaults standardUserDefaults] setObject:groupName forKey:LSLGroupNameKey];
[[NSUserDefaults standardUserDefaults] synchronize];
}
return groupName;
}
// 保存圖片
- (IBAction)save:(id)sender {
// 獲得文件夾的名字
__block NSString *groupName = [self getGropName];
__weak ALAssetsLibrary *weakLibrary = self.library;
__weak typeof(self) weakSelf = self;
// 1.先參加一個文件
[weakLibrary addAssetsGroupAlbumWithName:groupName resultBlock:^(ALAssetsGroup *group) {
if (group) { // 2.創建文件成功
// 保存圖片到文件夾中
[weakSelf saveImageToGroup:group];
} else { // 3.文件夾已經存在
// 遍歷所有文件夾
[weakLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
NSString *name = [group valueForProperty:ALAssetsGroupPropertyName];
if ([name isEqualToString:groupName]) { // 是自己創建的文件夾
// 保存圖片到文件夾中
[weakSelf saveImageToGroup:group];
*stop = YES;
} else if( [name isEqualToString:@"Camera Roll"]){ // 根據遍歷的規律,一般先遍歷用戶創建的文件夾最后遍歷系統自帶的文件夾“Camera Roll”和“null”即刪除文件夾。當判斷走到這里的時候,如果文件夾名等于@"Camera Roll"那么表示,系統默認相冊文件夾被用戶刪除了,需重寫創建。
// 系統默認文件夾被用戶刪除
groupName = [groupName stringByAppendingString:@" "];
// 把文件名保存到沙盒中
[[NSUserDefaults standardUserDefaults] setObject:groupName forKey:LSLGroupNameKey];
[[NSUserDefaults standardUserDefaults] synchronize];
// 創建圖片文件夾
[weakLibrary addAssetsGroupAlbumWithName:groupName resultBlock:^(ALAssetsGroup *group) {
// 保存圖片
[weakSelf saveImageToGroup:group];
} failureBlock:nil];
} } failureBlock:nil]; }
} failureBlock:nil];
}
// 保存圖片到相冊中
- (void)saveImageToGroup:(ALAssetsGroup *)group {
__weak ALAssetsLibrary *weakLibrary = self.library;
// 先把圖片保存到【相冊膠卷】中,self.imageView.image表示imageView中的圖片
[weakLibrary writeImageToSavedPhotosAlbum:self.imageView.image.CGImage metadata:nil completionBlock:^(NSURL *assetURL, NSError *error ) {
// 再把圖片保存到對于的文件中
[weakLibrary assetForURL:assetURL resultBlock:^(ALAsset *asset) {
[group addAsset:asset];
[SVProgressHUD showSuccessWithStatus:@"保存圖片成功"];
} failureBlock:nil]; }];
}
@end
github地址:https://github.com/SilongLi