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     } 

 

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

 

 

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。