摘要 我们有时候不只希望能将图片保存到相册里去,还希望在ios设备相册中创建一个新的相册,用如下的方法可以实现。

ios设备相册 创建相册 AssetsLibrary ALAssetsGroup ALAsset

目录[-]

  • 一:添加照片到相册中(不在ios设备的相册中创建相册)
  • 二:在手机相册(ios设备相册)中创建相册
  • 第一步:向工程里添加AssetsLibrary 库文件
  • 第二步:在项目中"import" 导入库(在哪用就在哪导入)
  • 核心代码
  • 三、ALAssetsLibrary、ALAssetsGroup、ALAsset 介绍
  • 1、ALAssetsLibrary
  • 2、ALAssetsGroup
  • 3、ALAsset
  • 4、ALAssetRepresentation

这篇博客的主要内容来源于cocoachina 里的贴子,代码能实现在在手机相册(ios设备相册)中创建相册的功能。

原文地址:http://www.cocoachina.com/bbs/read.php?tid=143383

一:添加照片到相册中(不在ios设备的相册中创建相册)

使用代码

?
1
    UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);

使用这句话就能把图片存入照片中了

二:在手机相册(ios设备相册)中创建相册

第一步:向工程里添加AssetsLibrary 库文件

第二步:在项目中"import" 导入库(在哪用就在哪导入)

?
1
#import <AssetsLibrary/AssetsLibrary.h>

核心代码

在需要添加相册的地方调用代码

?
1
2
3
4
5
6
//添加到相册我让它执行是异步执行的方式,如果不想用这种方式,可以不去开一个线程
 dispatch_async(dispatch_get_global_queue(0, 0), ^{
         
        [self createAlbumInPhoneAlbum];
         
    });

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#pragma mark - 在手机相册中创建相册
- (void)createAlbumInPhoneAlbum
{
    ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init];
    NSMutableArray *groups=[[NSMutableArray alloc]init];
    ALAssetsLibraryGroupsEnumerationResultsBlock listGroupBlock = ^(ALAssetsGroup *group, BOOL *stop)
    {
        if (group)
        {
            [groups addObject:group];
        }
         
        else
        {
            BOOL haveHDRGroup = NO;
             
            for (ALAssetsGroup *gp in groups)
            {
                NSString *name =[gp valueForProperty:ALAssetsGroupPropertyName];
                 
                if ([name isEqualToString:@"相册名字"])
                {
                    haveHDRGroup = YES;
                }
            }
             
            if (!haveHDRGroup)
            {
                //do add a group named "XXXX"
                [assetsLibrary addAssetsGroupAlbumWithName:@"相册名字"
                                               resultBlock:^(ALAssetsGroup *group)
                 {
                     [groups addObject:group];
                      
                 }
                                              failureBlock:nil];
                haveHDRGroup = YES;
            }
        }
         
    };
    //创建相簿
    [assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAlbum usingBlock:listGroupBlock failureBlock:nil];
     
    [self saveToAlbumWithMetadata:nil imageData:UIImagePNGRepresentation(self.imageView.image) customAlbumName:@"相册名字" completionBlock:^
     {
         //这里可以创建添加成功的方法
          
     }
      failureBlock:^(NSError *error)
     {
         //处理添加失败的方法显示alert让它回到主线程执行,不然那个框框死活不肯弹出来
         dispatch_async(dispatch_get_main_queue(), ^{
              
             //添加失败一般是由用户不允许应用访问相册造成的,这边可以取出这种情况加以判断一下
             if([error.localizedDescription rangeOfString:@"User denied access"].location != NSNotFound ||[error.localizedDescription rangeOfString:@"用户拒绝访问"].location!=NSNotFound){
                  
                 UIAlertView *alert=[[UIAlertView alloc]initWithTitle:error.localizedDescription message:error.localizedFailureReason delegate:nil cancelButtonTitle:NSLocalizedString(@"ok", nil) otherButtonTitles: nil];
                  
                 [alert show];
                 [alert release];
                 
                  }
         });
     }];
}
- (void)saveToAlbumWithMetadata:(NSDictionary *)metadata
                      imageData:(NSData *)imageData
                customAlbumName:(NSString *)customAlbumName
                completionBlock:(void (^)(void))completionBlock
                   failureBlock:(void (^)(NSError *error))failureBlock
{
     
    ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init];
    void (^AddAsset)(ALAssetsLibrary *, NSURL *) = ^(ALAssetsLibrary *assetsLibrary, NSURL *assetURL) {
        [assetsLibrary assetForURL:assetURL resultBlock:^(ALAsset *asset) {
            [assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
             
                if ([[group valueForProperty:ALAssetsGroupPropertyName] isEqualToString:customAlbumName]) {
                    [group addAsset:asset];
                    if (completionBlock) {
                        completionBlock();
                    }
                }
            } failureBlock:^(NSError *error) {
                if (failureBlock) {
                    failureBlock(error);
                }
            }];
        } failureBlock:^(NSError *error) {
            if (failureBlock) {
                failureBlock(error);
            }
        }];
    };
    [assetsLibrary writeImageDataToSavedPhotosAlbum:imageData metadata:metadata completionBlock:^(NSURL *assetURL, NSError *error) {
        if (customAlbumName) {
            [assetsLibrary addAssetsGroupAlbumWithName:customAlbumName resultBlock:^(ALAssetsGroup *group) {
                if (group) {
                    [assetsLibrary assetForURL:assetURL resultBlock:^(ALAsset *asset) {
                        [group addAsset:asset];
                        if (completionBlock) {
                            completionBlock();
                        }
                    } failureBlock:^(NSError *error) {
                        if (failureBlock) {
                            failureBlock(error);
                        }
                    }];
                else {
                    AddAsset(assetsLibrary, assetURL);
                }
            } failureBlock:^(NSError *error) {
                AddAsset(assetsLibrary, assetURL);
            }];
        else {
            if (completionBlock) {
                completionBlock();
            }
        }
    }];
}

三、ALAssetsLibrary、ALAssetsGroup、ALAsset 介绍

1、ALAssetsLibrary

ALAssetsLibrary提供了我们对iOS设备中的相片、视频的访问。它是连接了我们应用程序和相册之间的访问的一个桥梁。

2、ALAssetsGroup

指代一个相册。

3、ALAsset

每一个ALAsset代表一个单一资源文件(也就是一张图片,或者一个视频文件)

4、ALAssetRepresentation

ALAssetRepresentation封装了ALAsset,包含了一个资源文件中的很多属性。(可以说是ALAsset的不同的表示方式,本质上都表示同一个资源文件)

在手机相册(ios设备相册)中创建相册相关推荐

  1. Linux设备驱动程序中创建线程的方法

    参考博客文章来源:https://blog.csdn.net/ezimu/article/details/60467017 第一种方法:kernel_thread #include <linux ...

  2. html5 调用系统相册,iOS之H5调用系统相册相机浏览文件

    在我们iOS开发中大家遇到过H5和原生交互,需要上传文件,刚开始的思路肯定是在之前轻车熟路的js交互中原生方法获取文件之后上传,今天我们了解一个新的方法,其实苹果官方给我们提供了一个更简单的方法, H ...

  3. Android实现自定义相册,在Android Gallery App中创建自定义相册

    您可以使用这种方式在Gallery应用中创建相册.该名称显示为"app images". String path = Environment.getExternalStorageD ...

  4. c语言保存图片image,iOS 保存图片到【自定义相册】

    3.1.Photos 框架基本认识,我们可以在 Help->Developer Documentation-> 选择OC或者Swift 搜索 Photos Photos 框架检索 Phot ...

  5. 教程:手机数据恢复 安卓设备内置存储器创建镜像到电脑数据恢复

    教程:手机数据恢复 安卓设备内置存储器创建镜像到电脑数据恢复 2014-7-17 10:59| 发布者: 蝴蝶| 查看: 20538| 评论: 7|原作者: 330wang|来自: INTOHARD独 ...

  6. 【苹果相册推】Xcode项目,我们将其命名为mypushchat,以及调试的iOS设备

    推荐内容IMESSGAE相关 作者✈️@IMEAX推荐内容 iMessage苹果推软件 *** 点击即可查看作者要求内容信息 作者✈️@IMEAX推荐内容 1.家庭推内容 *** 点击即可查看作者要求 ...

  7. 手机邮箱看不到已发送邮件_iPhone用户请注意:你的邮件App得禁用,刚曝光的安全漏洞,iOS 6以上设备全中招...

    晓查 白交 发自 凹非寺  量子位 报道 | 公众号 QbitAI 你的iPhone不安全,就算静静地躺在那里也不安全. 最新曝光,来自国外安全团队ZecOps公布了一个惊天大漏洞,估测涉及5亿用户. ...

  8. 华为手机8.0.0怎么找到云相册_华为G9怎么找到云相册_失而复得 华为“查找手机”功能有多强大?快来了解一下......

    [手机中国新闻]人生有三大幸事:虚惊一尝久别重逢.失而复得.手机作为我们日常生活中不可或缺的重要工具,几乎是每个人每天的必备品.但每天在全世界都有千千万万人,因为种种原因,将他们的手机丢失.由于手机是 ...

  9. Unity与IOS交互,调用相机相册,兼容ipad

    IOS篇 在处理unity和ios的时候,除了对oc不太习惯以外,还有就是iphone和ipad有些方法需要做区别.比如通用的弹窗方法不用,以及ipad上打开相册竟然可以支持显示的相册不是全屏了!好吧 ...

  10. Ionic2中的相册选择和拍照上传——ImgService

    目录 目录 前言 Cordova准备 ImgService服务的实现 ImgService服务的使用 示例效果 相册选择器的汉化 参考 前言 在APP中启动相册选择器或者拍照上传图片这些功能是非常常见 ...

最新文章

  1. 【题解】P1508 Likecloud-吃、吃、吃(简单DP)
  2. 一文看懂 AI 训练集、验证集、测试集(附:分割方法+交叉验证)
  3. IDEA统一设置编码为utf-8编码及tomcat 乱码问题的解决
  4. python实战===图片转换为字符的源码(转)
  5. 开头th_是什么文件_Python文件读写最详细的讲解
  6. setResult详解
  7. 【华为云技术分享】云小课 | SAP S/4HANA高可用之实战演练
  8. [Java] 1001. 害死人不偿命的(3n+1)猜想 (15)-PAT乙级
  9. 七十首绝对好听的冷门歌曲(转)
  10. Python学习笔记—— 面向对象4.类属性、类方法、静态方法
  11. 笔记本电脑连接加密无线路由器。
  12. NEON Intrinsics 练习题
  13. 东北大学计算机学院生产实习,东北大学生产实习报告.doc
  14. C++:Leetcode-滑动窗口-904.水果成篮
  15. 华为防火墙配置流量根据链路权重负载分担
  16. Ardiuno智能电蚊拍
  17. MAX17043锂电池电量测量芯片C51驱动
  18. 纽约大学计算机博士奖学金如何,斑马博士捷报|纽约大学(NYU) MS Computer Engineering录取+7000美金奖学金!...
  19. 首席商学院新媒体运营黎想:抖音直播入门教学,点这!
  20. 会PLC也能玩转机器视觉(二)- 条码识别

热门文章

  1. 1436 旅行终点站
  2. 查看nvidia gpu共享内存大小
  3. 服务器视频文件外链,视频图床 视频外链网站 视频上传外链分享
  4. Atitit. 软件开发中的管理哲学--一个伟大的事业必然是过程导向为主 过程导向 vs 结果导向
  5. 触摸屏与TSC2005触摸屏控制器
  6. xp系统打印机服务器win7连接不了,xp连不上win7的打印机,win7连接打印机
  7. Redis总结笔记(总结自Redis开发与运维)
  8. 苹果开发者账户续费 支付授权失败
  9. 软考嵌入式系统设计师2013年上午试题总结
  10. 检查型异常有哪些java_JAVA系列之检查型异常与非检查型异常的详解