您的位置:首页 > 移动开发 > IOS开发

iOS相册多选照片

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

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

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

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

代码:

 
OC代码 

 ALAssetsLibrary *libray = [[ALAssetsLibrary alloc] init];  

      

    /* 

     通过相册库枚举遍历所有的文件夹ALAssetsGroup 

     usingBlock : 有多少个Group文件夹,则调用多少次block,每次将对应的文件夹Group传过来 

     */  

    [libray enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) {  

          

        if (group != nil) {  

  

            //设置过滤对象  

//            ALAssetsFilter *filter = [ALAssetsFilter allVideos];  

//            [group setAssetsFilter:filter];  

              

            //通过文件夹枚举遍历所有的相片ALAsset对象,有多少照片,则调用多少次block  

            [group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {  

                if (result != nil) {  

                    //将result对象存储到数组中  

                    [_data addObject:result];  

                }  

            }];  

        }  

          

        //刷新表格,显示照片  

        [_tableView reloadData];  

          

    } failureBlock:^(NSError *error) {  

          

    }];  

  

 

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

 

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

 
OC代码 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {  

    return _data.count;  

}  

  

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {  

      

    static NSString *identify = @"imageCell";  

      

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identify];  

      

    if (cell == nil) {  

        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identify] autorelease];    

    }  

      

    ALAsset *asset = [_data objectAtIndex:indexPath.row];  

      

    //获取到媒体的类型  

    NSString *type = [asset valueForProperty:ALAssetPropertyType];  

    //媒体类型是视频  

    if ([type isEqualToString:ALAssetTypeVideo]) {  

        cell.textLabel.text = @"视频";  

    } else {  

        cell.textLabel.text = @"照片";  

    }  

      

    //获取到相片、视频的缩略图  

    CGImageRef cgImage = [asset thumbnail];  

    UIImage *image = [UIImage imageWithCGImage:cgImage];  

      

    cell.imageView.image = image;  

      

      

    return cell;  



 

 

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

 


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios