• iOS相册多选照片


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

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

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


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

    代码:

     

    OC代码 

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

    2.       

    3.     /* 

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

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

    6.      */  

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

    8.           

    9.         if (group != nil) {  

    10.   

    11.             //设置过滤对象  

    12. //            ALAssetsFilter *filter = [ALAssetsFilter allVideos];  

    13. //            [group setAssetsFilter:filter];  

    14.               

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

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

    17.                 if (result != nil) {  

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

    19.                     [_data addObject:result];  

    20.                 }  

    21.             }];  

    22.         }  

    23.           

    24.         //刷新表格,显示照片  

    25.         [_tableView reloadData];  

    26.           

    27.     } failureBlock:^(NSError *error) {  

    28.           

    29.     }];  

    30.   

     

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

     

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

     

    OC代码 

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

    2.     return _data.count;  

    3. }  

    4.   

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

    6.       

    7.     static NSString *identify = @"imageCell";  

    8.       

    9.     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identify];  

    10.       

    11.     if (cell == nil) {  

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

    13.     }  

    14.       

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

    16.       

    17.     //获取到媒体的类型  

    18.     NSString *type = [asset valueForProperty:ALAssetPropertyType];  

    19.     //媒体类型是视频  

    20.     if ([type isEqualToString:ALAssetTypeVideo]) {  

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

    22.     } else {  

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

    24.     }  

    25.       

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

    27.     CGImageRef cgImage = [asset thumbnail];  

    28.     UIImage *image = [UIImage imageWithCGImage:cgImage];  

    29.       

    30.     cell.imageView.image = image;  

    31.       

    32.       

    33.     return cell;  

     

     

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

     

  • 相关阅读:
    笔记本越用越慢的解决方法。
    ubuntu 16.04 的IP地址变更
    如何把路由器当作交换机来使用
    通过 rufus 创建启动U盘,安装 VMWare Esxi
    Enable SMB2 on the Client
    Shiro入门学习与实战(一)
    Linux下Nginx1.9.9的安装
    Activiti工作流学习之SpringBoot整合Activiti5.22.0实现在线设计器(二)
    Activiti工作流学习之概述(一)
    Sqoop的安装及常用命令
  • 原文地址:https://www.cnblogs.com/allanliu/p/4203479.html
Copyright © 2020-2023  润新知