关于自定义相册删除复活的实现
在这里(http://www.cnblogs.com/iCocos/p/4705585.html)我们提到了。
- 1:简单的实现了获取系统相册图片并且保存图片到系统相册
- 2:定义自定义的相册,并且保存到自定义相册
这里久以一个简单的例子实现一个上面的所有功能,并且添加一个很有用的功能实现
- App中自定义的相册呗删除之后再次保存相片无法成功
这里使用的是一个系统的库:ALAssetsLibrary
先来看看咱们取得相册中的相片
1 - (void)getAllPhotos 2 { 3 ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; 4 // 遍历所有的文件夹, 一个ALAssetsGroup对象就代表一个文件夹 5 [library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) { 6 // 遍历文件夹内的所有多媒体文件(图片、视频), 一个ALAsset对象就代表一张图片 7 [group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) { 8 // 缩略图 9 XMGLog(@"%@", [UIImage imageWithCGImage:result.thumbnail]); 10 // 获得原始图片 11 // XMGLog(@"%@", [UIImage imageWithCGImage:result.defaultRepresentation.fullResolutionImage]); 12 }]; 13 14 } failureBlock:nil]; 15 }
下面我们看看代码具体的实现
一:首先定义一个属性涌来记录并且实现其他一些功能
/** 相册库 */ @property (nonatomic, strong) ALAssetsLibrary *library;
二:然后就懒加载这个属性
1 - (ALAssetsLibrary *)library 2 { 3 if (!_library) { 4 _library = [[ALAssetsLibrary alloc] init]; 5 } 6 return _library; 7 } 8
三:点击保存按钮的实现
1 - (IBAction)save 2 { 3 // 获得文件夹的名字 4 __block NSString *groupName = [self groupName]; 5 6 // self的弱引用 7 XMGWeakSelf; 8 9 // 图片库 10 __weak ALAssetsLibrary *weakLibrary = self.library; 11 12 // 创建文件夹 13 [weakLibrary addAssetsGroupAlbumWithName:groupName resultBlock:^(ALAssetsGroup *group) { 14 if (group) { // 新创建的文件夹 15 // 添加图片到文件夹中 16 [weakSelf addImageToGroup:group]; 17 } else { // 文件夹已经存在 18 [weakLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) { 19 NSString *name = [group valueForProperty:ALAssetsGroupPropertyName]; 20 if ([name isEqualToString:groupName]) { // 是自己创建的文件夹 21 // 添加图片到文件夹中 22 [weakSelf addImageToGroup:group]; 23 24 *stop = YES; // 停止遍历 25 } else if ([name isEqualToString:@"Camera Roll"]) { 26 // 文件夹被用户强制删除了 27 groupName = [groupName stringByAppendingString:@" "]; 28 // 存储新的名字 29 [[NSUserDefaults standardUserDefaults] setObject:groupName forKey:XMGGroupNameKey]; 30 [[NSUserDefaults standardUserDefaults] synchronize]; 31 // 创建新的文件夹 32 [weakLibrary addAssetsGroupAlbumWithName:groupName resultBlock:^(ALAssetsGroup *group) { 33 // 添加图片到文件夹中 34 [weakSelf addImageToGroup:group]; 35 } failureBlock:nil]; 36 } 37 } failureBlock:nil]; 38 } 39 } failureBlock:nil]; 40 } 41
四:添加图片
1 /** 2 * 添加一张图片到某个文件夹中 3 */ 4 - (void)addImageToGroup:(ALAssetsGroup *)group 5 { 6 __weak ALAssetsLibrary *weakLibrary = self.library; 7 // 需要保存的图片 8 CGImageRef image = self.imageView.image.CGImage; 9 10 // 添加图片到【相机胶卷】 11 [weakLibrary writeImageToSavedPhotosAlbum:image metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) { 12 [weakLibrary assetForURL:assetURL resultBlock:^(ALAsset *asset) { 13 // 添加一张图片到自定义的文件夹中 14 [group addAsset:asset]; 15 [SVProgressHUD showSuccessWithStatus:@"保存成功!"]; 16 } failureBlock:nil]; 17 }]; 18 }
五:关于沙河中的组名
先定义一个用于保存名字用的key和一个需要保存的名字
static NSString * const iCocosGroupNameKey = @"iCocosGroupNameKey"; static NSString * const iCocosDefaultGroupName = @"iCocos";
实现祖名的存取
1 - (NSString *)groupName 2 { 3 // 先从沙盒中取得名字 4 NSString *groupName = [[NSUserDefaults standardUserDefaults] stringForKey:XMGGroupNameKey]; 5 if (groupName == nil) { // 沙盒中没有存储任何文件夹的名字 6 groupName = XMGDefaultGroupName; 7 8 // 存储名字到沙盒中 9 [[NSUserDefaults standardUserDefaults] setObject:groupName forKey:XMGGroupNameKey]; 10 [[NSUserDefaults standardUserDefaults] synchronize]; 11 } 12 13 return groupName; 14 } 15
时间: 2025-01-06 10:57:02