iOS开发中读取照片库

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

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

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

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

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

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

还需要了解的一个东东就是blocks,apple在iOS 4.0以后大量出现了这玩意儿,有使用越来越广的意思,不过这玩意儿确实好用。关于这玩意儿的内容我在这里不多讲,关注我的博客我会细讲。

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

下面直接看代码吧:

  1. ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc]init];//生成整个photolibrary句柄的实例  
  2. NSMutableArray *mediaArray = [[NSMutableArray alloc]init];//存放media的数组  
  3. [assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {//获取所有group  
  4. [group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {//从group里面  
  5. NSString* assetType = [result valueForProperty:ALAssetPropertyType];  
  6. if ([assetType isEqualToString:ALAssetTypePhoto]) {  
  7. NSLog(@"Photo");  
  8. }else if([assetType isEqualToString:ALAssetTypeVideo]){  
  9. NSLog(@"Video");  
  10. }else if([assetType isEqualToString:ALAssetTypeUnknown]){  
  11. NSLog(@"Unknow AssetType");  
  12. }  
  13.  
  14. NSDictionary *assetUrls = [result valueForProperty:ALAssetPropertyURLs];  
  15. NSUInteger assetCounter = 0;  
  16. for (NSString *assetURLKey in assetUrls) {  
  17. NSLog(@"Asset URL %lu = %@",(unsigned long)assetCounter,[assetUrls objectForKey:assetURLKey]);  
  18. }  
  19.  
  20. NSLog(@"Representation Size = %lld",[[result defaultRepresentation]size]);  
  21. }];  
  22. } failureBlock:^(NSError *error) {  
  23. NSLog(@"Enumerate the asset groups failed.");  
  24. }];  

剩下的就是怎么从每个asset获取相应的subnail或者原图或者其他信息了。It's very easy.

责任编辑:闫佳明 来源: apkbus
相关推荐

2013-04-01 10:49:51

iOS开发sqlite数据库

2015-09-01 10:37:54

ios静态库开发

2011-07-21 11:05:18

iOS 族谱 Cocoa

2015-09-11 11:02:23

ios静态库开发

2014-03-06 15:49:36

iOS开源库汇总

2015-03-18 09:29:12

iOS开发争议

2011-08-22 15:43:08

IOS开发数据库

2013-05-03 13:42:20

iOS开发SQLite3存储读取

2015-10-20 11:22:34

iOS开发Git

2011-08-22 16:08:46

IOS开发数据库

2009-12-23 09:05:03

2013-07-21 18:04:22

ASIHttpRequiOS开发

2014-05-13 10:12:17

iOS开发开源类库

2014-07-30 14:37:00

FacebookiOS开源库

2015-02-11 18:02:59

iOS源码Swift图表库

2013-07-22 14:10:26

iOS开发ASIHTTPRequ

2014-02-19 09:59:52

iOS开发Html解析

2013-07-22 13:48:55

iOS开发ASIHTTPRequ使用Cookie

2014-02-19 09:51:29

iOS开发时间处理

2014-04-23 14:40:06

iOS开发KVO内部实现
点赞
收藏

51CTO技术栈公众号