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 }
通过这样就能显示所有的相册中得图片
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。