首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 操作系统 >

iOS中读取相片库

2013-07-08 
iOS中读取照片库iOS中如果我们只有一次读取一张图片或者一个视频(或拍一张照片/视频)的需求,那么我们用 UI

iOS中读取照片库

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句柄的实例?????NSMutableArray?*mediaArray?=?[[NSMutableArray?alloc]init];//存放media的数组?????
  2. ????[assetsLibrary?enumerateGroupsWithTypes:ALAssetsGroupAll?usingBlock:^(ALAssetsGroup?*group,?BOOL?*stop)?{//获取所有group?????????????[group?enumerateAssetsUsingBlock:^(ALAsset?*result,?NSUInteger?index,?BOOL?*stop)?{//从group里面?????
  3. ????????????NSString*?assetType?=?[result?valueForProperty:ALAssetPropertyType];????????????????if?([assetType?isEqualToString:ALAssetTypePhoto])?{????
  4. ????????????????NSLog(@"Photo");????????????????}else?if([assetType?isEqualToString:ALAssetTypeVideo]){????
  5. ????????????????NSLog(@"Video");????????????????}else?if([assetType?isEqualToString:ALAssetTypeUnknown]){????
  6. ????????????????NSLog(@"Unknow?AssetType");????????????????}????
  7. ????????????????????????????NSDictionary?*assetUrls?=?[result?valueForProperty:ALAssetPropertyURLs];????
  8. ????????????NSUInteger?assetCounter?=?0;????????????????for?(NSString?*assetURLKey?in?assetUrls)?{????
  9. ????????????????NSLog(@"Asset?URL?%lu?=?%@",(unsigned?long)assetCounter,[assetUrls?objectForKey:assetURLKey]);????????????????}????
  10. ????????????????????????????NSLog(@"Representation?Size?=?%lld",[[result?defaultRepresentation]size]);????
  11. ????????}];????????}?failureBlock:^(NSError?*error)?{????
  12. ????????NSLog(@"Enumerate?the?asset?groups?failed.");????????}];???

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

热点排行