码迷,mamicode.com
首页 > 移动开发 > 详细

iOS开发——实用技术OC篇&关于自定义相册删除复活的实现

时间:2015-09-16 21:37:38      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:

关于自定义相册删除复活的实现

 

 
在这里(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  

 

 

 

iOS开发——实用技术OC篇&关于自定义相册删除复活的实现

标签:

原文地址:http://www.cnblogs.com/iCocos/p/4814541.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!