iOS 照片多选

我们知道UIKit框架为我们提供了UIImagePickerController 这个控制器来读取相册资源,但是通过这个控制器我们只能选取一张照片,但是如果想选取多张照片,又该如何操作呢?

AssetsLibrary.framework 通过这个框架,我们可以读取到相册中所有的照片资源。这个框架主要提供了这么几个类:

ALAssetsLibrary     指的是整个相册库
ALAssetsGroup       指的是相册中的文件夹
ALAsset             指的是文件夹中的照片、视频

以上三个类的使用 :
先通过  ALAssetsLibrary 类创建相册对象,再通过此相册对象循环遍历相册中得文件夹对象:ALAssetsGroup  。再通过每一个文件夹对象,循环遍历此文件夹中的所有的相册、视频对象:ALAsset。此对象中包含了相册、视频数据,通过这样几次遍历,我们就能获取到相册中所有的照片、视频数据。

代码:

 1 ALAssetsLibrary *libray = [[ALAssetsLibrary alloc] init];
 2
 3
 4
 5     /*
 6
 7      通过相册库枚举遍历所有的文件夹ALAssetsGroup
 8
 9      usingBlock : 有多少个Group文件夹,则调用多少次block,每次将对应的文件夹Group传过来
10
11      */
12
13     [libray enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
14
15
16
17         if (group != nil) {
18
19
20
21             //设置过滤对象
22
23 //            ALAssetsFilter *filter = [ALAssetsFilter allVideos];
24
25 //            [group setAssetsFilter:filter];
26
27
28
29             //通过文件夹枚举遍历所有的相片ALAsset对象,有多少照片,则调用多少次block
30
31             [group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
32
33                 if (result != nil) {
34
35                     //将result对象存储到数组中
36
37                     [_data addObject:result];
38
39                 }
40
41             }];
42
43         }
44
45
46
47         //刷新表格,显示照片
48
49         [_tableView reloadData];
50
51
52
53     } failureBlock:^(NSError *error) {
54
55
56
57     }];  

以上代码通过循环遍历获取到所有的相册对象ALAsset,然后存储到数组对象_data中,再通过UITableView显示在单元格中。

以下是单元格的创建,并且取得ALAsset对象中的数据,显示出来:

 1     - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
 2
 3         return _data.count;
 4
 5     }
 6
 7
 8
 9     - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
10
11
12
13         static NSString *identify = @"imageCell";
14
15
16
17         UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identify];
18
19
20
21         if (cell == nil) {
22
23             cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identify] autorelease];
24
25         }
26
27
28
29         ALAsset *asset = [_data objectAtIndex:indexPath.row];
30
31
32
33         //获取到媒体的类型
34
35         NSString *type = [asset valueForProperty:ALAssetPropertyType];
36
37         //媒体类型是视频
38
39         if ([type isEqualToString:ALAssetTypeVideo]) {
40
41             cell.textLabel.text = @"视频";
42
43         } else {
44
45             cell.textLabel.text = @"照片";
46
47         }
48
49
50
51         //获取到相片、视频的缩略图
52
53         CGImageRef cgImage = [asset thumbnail];
54
55         UIImage *image = [UIImage imageWithCGImage:cgImage];
56
57
58
59         cell.imageView.image = image;
60
61
62
63
64
65         return cell;
66
67     } 

通过这样就能显示所有的相册中得图片

时间: 2024-08-02 13:16:47

iOS 照片多选的相关文章

IOS照片颠倒分析及移动/页面端的处理策略和思路

前言: 前几天, 写了一篇关于IOS手机上传照片颠倒的技术分析文章: IOS照片颠倒分析及PHP服务端的处理. 不过其思路是从服务器来进行处理的, 这种做法相当普遍. 今天来讲述下, 如何从移动端/页面端, 来解决这个问题, 侧重于讲讲思路. 意义: 但移动互联网有它独特的背景, 至今降耗电和省流量, 是很多移动端产品孜孜努力的方向. 再者移动端手机的照片大小, 普遍较大, 因此直接往服务器传, 往往会消耗很多流量, 在弱网环境下, 用户等待的时间也长, 时常会失败, 体验非常不好. 因此移动端

iOS本地照片多选的实现

提示:iOS8须要更改一处代码.即设置scrollview滚动究竟部那块代码.大家可去掉再执行源代码 自己写起来还是蛮费事的! 本来打算使用网上流传非常久的ELCImagePickerController,可是有些功能不太符合我的要求,在上面改动呢,又认为思路不清晰.并且非常多代码看不懂,于是依照自己的思路写了一个演示样例!基本符合自己的期望,可是不知道在几百张照片的时候会不会卡顿,走一步算一步吧! 下面是预期效果图: 点击"选择照片",打开图片2:默认打开"本地相机&quo

IOS照片颠倒分析及PHP服务端的处理

前言: 因朋友的PHP小项目, 而去帮忙解决了一个小问题, 现在来总结概括一下. 也不知道大家在使用和开发的过程中有没有遇到类似的场景, IPhone手机上传照片后, 发现图片方向颠倒了, 甚至各种姿势(90, 180, 270度旋转)都有, T_T. php和nginx文章的相关列表: • nginx服务配置---php服务接入  • nginx+tomcat集群配置(1)---根目录设定和多后端分发配置  • nginx+tomcat集群配置(2)---静态和动态资源的分离 • nginx+

IOS照片框架

介绍 每天,用 iPhone 拍摄的照片数量超过了任何相机.每年 iOS 设备上的显示效果变得越来越好,回到 iPad 刚出现还没有 Retina 显示屏的时代,大屏幕的杀手级功能之一就是可以展示用户照片和浏览器照片库.自从相机成为 iPhone 最重要和最受欢迎的功能开始,对能管理和加工用户照片库中宝贵的照片的应用程序和工具就有着巨大的需求. 直到 2014 年夏天前,开发者只能用 AssetsLibrary 框架访问日益增长的用户的照片库.几年以来,相机应用和照片应用发生了显著的变化,增加了

iOS TableView多选删除理解2

因为镔哥学习iOS也不是很长时间,所以对很多控件都是一边工作一边学习,现在最近因为项目需求又研究了一下多选删除,其实网上很多这样的demo,但是基本不是纯代码,而且很多方面没有考虑,然后我自己理解上又根基一些demo,自己先了一个,供大家一起学习. 我讲解一下思路就直接代码吧: 思路:一般要实现多选删除 1:前提你要有数据: NSMutableArray *dataArray;//临时用假数据代替 2:你也要有一个存储勾选删除的数据 NSMutableArray *removeList;//勾选

IOS UITableView多选删除功能

UITbableView作为列表展示信息,除了展示的功能,有时还会用到删除,比如购物车.收藏列表等. 单行删除功能可以直接使用系统自带的删除功能,当横向轻扫cell时,右侧出现红色的删除按钮,点击删除当前cell.或者让表格进入编辑状态后,点击左侧的红色按钮,右侧出现删除按钮,删除,如下图所示.单行自带删除已经在前面文章中进行过讲解,需要的可以去查阅. 多选删除是点击编辑按钮,让表格进入编辑状态后,每行的左侧出现一个小圆圈,当点击行的时候,可以选中该行或者取消选中该行,当点击按钮确定删除的时候才

仿微信照片多选的几点总结

1.首先是获取本机的所有图片的路径,文件名等信息 android本地的媒体信息由MediaStore管理,并通过ContentProvider共享数据.MediaStore有个内部类MediaStore.Images,维护系统中存储的图片信息,通过MediaStore.Images.Media.EXTERNAL_CONTENT_URI可以获取到图片的相关信息,包括路径MediaStore.Images.Media.DATA,文件名MediaStore.Images.Media.DISPLAY_N

IOS开发-影院选座算法 限制产生孤座

众所周知目前影院选座是不允许随便选的,我们不可以任性的挑三拣四,最后留下N个单独的座位,目的就是要留下至少2个连着的座位: 另外有些影院的座位摆放并不是规则的,有些座位被过道或者特殊座位分割开,产生了不同的分区,这里就实现检测有没有座位变成了孤座, 孤座的含义简单说就是两个小情侣不能挨着坐了~ 但是也存在特殊情况,及因为分区的缘故,某一排连着的座位只有2个,或者只有3个,这时候还是可以允许人家买其中之一,或者之二的~ 好,条件说完之后,开始介绍数据结构,正常情况下,影院的每一个座位数据会包含坐标

IOS 照片浏览器总结(思想步骤)

1. 界面分析========================================1> 需要读取或修改属性的控件需要设置属性// 序号标签// 图片// 图片描述// 左边按钮// 右边按钮2> 需要监听响应事件的对象,需要添加监听方法// 左边按钮// 右边按钮 2. 手码懒加载创建控件的步骤========================================1> 定义控件属性,注意:属性必须是strong的,示例代码如下:@property (nonatomi