iOS中读取照片库
2013-12-27 17:49
155 查看
转载自:http://blog.csdn.net/iukey/article/details/8015114
iOS中如果我们只有一次读取一张图片或者一个视频(或拍一张照片/视频)的需求,那么我们用 UIImagePickerController 就可以搞定。但是很多时候我们需要一次性从PhotoLibrary读取多个照片或者视频,这时候我们就需要另辟蹊径了,好在apple为我们提供了相应的接口。
在开始coding之前我们想要认识几个类:
ALAssetsLibrary:代表整个PhotoLibrary,我们可以生成一个它的实例对象,这个实例对象就相当于是照片库的句柄。
ALAssetsGroup:照片库的分组,我们可以通过ALAssetsLibrary的实例获取所有的分组的句柄。
ALAsset:一个ALAsset的实例代表一个资产,也就是一个photo或者video,我们可以通过他的实例获取对应的subnail或者原图等等。
还需要了解的一个东东就是blocks,apple在iOS 4.0以后大量出现了这玩意儿,有使用越来越广的意思,不过这玩意儿确实好用。关于这玩意儿的内容我在这里不多讲,关注我的博客我会细讲。
对于本文的需求,我们读取group和每个asset都是异步的,但是我们现在用blocks我们可以在一个函数里面搞定。所以blocks确实很方便。
下面直接看代码吧:
[java] view
plaincopyprint?
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.");
}];
剩下的就是怎么从每个asset获取相应的thumbnail或者原图或者其他信息了。It's very easy.
太晚了,先睡觉,明天再讲,请关注下一片文章。
iOS中如果我们只有一次读取一张图片或者一个视频(或拍一张照片/视频)的需求,那么我们用 UIImagePickerController 就可以搞定。但是很多时候我们需要一次性从PhotoLibrary读取多个照片或者视频,这时候我们就需要另辟蹊径了,好在apple为我们提供了相应的接口。
在开始coding之前我们想要认识几个类:
ALAssetsLibrary:代表整个PhotoLibrary,我们可以生成一个它的实例对象,这个实例对象就相当于是照片库的句柄。
ALAssetsGroup:照片库的分组,我们可以通过ALAssetsLibrary的实例获取所有的分组的句柄。
ALAsset:一个ALAsset的实例代表一个资产,也就是一个photo或者video,我们可以通过他的实例获取对应的subnail或者原图等等。
还需要了解的一个东东就是blocks,apple在iOS 4.0以后大量出现了这玩意儿,有使用越来越广的意思,不过这玩意儿确实好用。关于这玩意儿的内容我在这里不多讲,关注我的博客我会细讲。
对于本文的需求,我们读取group和每个asset都是异步的,但是我们现在用blocks我们可以在一个函数里面搞定。所以blocks确实很方便。
下面直接看代码吧:
[java] view
plaincopyprint?
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.");
}];
剩下的就是怎么从每个asset获取相应的thumbnail或者原图或者其他信息了。It's very easy.
太晚了,先睡觉,明天再讲,请关注下一片文章。
相关文章推荐
- iOS中读取照片库
- iOS中读取照片库
- iOS中读取照片库
- iOS中读取照片库及保存图片或视频到照片库的要点解析
- iOS中读取照片库
- iOS中读取照片库
- iOS中读取照片库
- iOS中使用.plist文件延迟读取的方法(续)
- ios学习:AVAudioPlayer播放音乐文件及读取ipod库中的音乐文件
- iOS 数据持久化 NSUserDefault 的使用 NSUserDefaults读取和写入自定义对象
- iOS学习笔记-035.数据的读取——系统偏好的写入和读取
- iOS中归档对象的创建,数据写入与读取
- iOS基础知识:文件流写入读取结构体变量、数组、结构体数组
- iOS开发:用SQLite3存储和读取数据
- iOS访问通讯录开发-读取联系人信息
- IOS-OC读取通讯录联系人信息
- Unity3D读取Ios中的动态UIImage图片内容!!!!
- c++ std::ifstream 读取文件不完整? 是不是忘记了ios_base::binary
- iOS中的 沙盒文件夹 (数据的写入和读取,归档和反归档)
- [IOS]NSUserDefaults读取和写入