现在的位置: 首页 > 综合 > 正文

iOS中读取照片库

2018年05月12日 ⁄ 综合 ⁄ 共 1454字 ⁄ 字号 评论关闭

iOS中如果我们只有一次读取一张图片或者一个视频(或拍一张照片/视频)的需求,那么我们用 UIImagePickerController 就可以搞定。但是很多时候我们需要一次性从PhotoLibrary读取多个照片或者视频,这时候我们就需要另辟蹊径了,好在apple为我们提供了相应的接口。

在开始coding之前我们想要认识几个类:

ALAssetsLibrary:代表整个PhotoLibrary,我们可以生成一个它的实例对象,这个实例对象就相当于是照片库的句柄。

ALAssetsGroup:照片库的分组,我们可以通过ALAssetsLibrary的实例获取所有的分组的句柄。

ALAsset:一个ALAsset的实例代表一个资产,也就是一个photo或者video,我们可以通过他的实例获取对应的subnail或者原图等等。

对于本文的需求,我们读取group和每个asset都是异步的,但是我们现在用blocks我们可以在一个函数里面搞定。所以blocks确实很方便。

下面直接看代码吧:

ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc]init];//生成整个photolibrary句柄的实例

 NSMutableArray *mediaArray = [[NSMutableArray alloc]init];//存放media的数组

 [assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {//获取所有group

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

 NSString* assetType = [result valueForProperty:ALAssetPropertyType];

 if ([assetType isEqualToString:ALAssetTypePhoto]) {

 NSLog(@"Photo");

 }else if([assetType isEqualToString:ALAssetTypeVideo]){

 NSLog(@"Video");

 }else if([assetType isEqualToString:ALAssetTypeUnknown]){

 NSLog(@"Unknow AssetType");

 }

 

 NSDictionary *assetUrls = [result valueForProperty:ALAssetPropertyURLs];

 NSUInteger assetCounter = 0;

 for (NSString *assetURLKey in assetUrls) {

 NSLog(@"Asset URL %lu = %@",(unsigned long)assetCounter,[assetUrls objectForKey:assetURLKey]);

 }

 

 NSLog(@"Representation Size = %lld",[[result defaultRepresentation]size]);

 }];

 } failureBlock:^(NSError *error) {

 NSLog(@"Enumerate the asset groups failed.");

 }];


抱歉!评论已关闭.