iOS的AssetsLibrary框架访问所有相片
该框架下有几个类,ALAssetsLibrary,ALAssetsGroup,ALAsset,ALAssetsFilter,ALAssetRepresentation。
ALAssetsLibrary类
ALAssetsLibrary类可以实现查看相册列表,增加相册,保存图片到相册等功能。
例如enumerateGroupsWithTypes方法列举所有相册。
ALAssetsGroup
ALAssetsGroup就是相册的类,可以通过valueForProperty方法查看不同属性的值,如:ALAssetsGroupPropertyName,相册名。
ALAssetsGroup类有几个方法,posterImage方法就是相册的封面图片,numberOfAssets方法获取该相册的图片视频数量,可以通过enumerateAssetsUsingBlock方法列举出所有照片。
ALAssetsGroup 可以使用setAssetsFilter:(ALAssetsFilter *)filter过滤照片或者视频等。
第一步获取相册:
首先是获取所有相册,通过ALAssetsLibrary的实例方法得到ALAssetsGroup类数组。
ALAssetsLibraryGroupsEnumerationResultsBlock resultsBlock = ^(ALAssetsGroup *group, BOOL *stop) {
if (group)
{
[self.groupArray addObject:group];
[self.nameArr addObject:[group valueForProperty:ALAssetsGroupPropertyName]]; //相册名
[self.numArr addObject:[NSString stringWithFormat:@"%d",[group numberOfAssets]]];//相册的图片视频数量
UIImage *Image = [[UIImage alloc]initWithCGImage:[group posterImage]]; //相册的封面图片
[self.ImageArr addObject:Image];
NSLog(@"self.ImageArr%@",Image);
}
else
{
[self.TableView reloadData];
}
};
ALAssetsLibraryAccessFailureBlock failureBlock = ^(NSError *error) {
};
// Enumerate Camera roll first
[self.assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos
usingBlock:resultsBlock
failureBlock:failureBlock];
// Then all other groups
NSUInteger type =
ALAssetsGroupLibrary | ALAssetsGroupAlbum | ALAssetsGroupEvent |
ALAssetsGroupFaces | ALAssetsGroupPhotoStream;
[self.assetsLibrary enumerateGroupsWithTypes:type
usingBlock:resultsBlock
failureBlock:failureBlock];
ALAsset类
ALAsset类也可以通过valueForProperty方法查看不同属性的值,如:ALAssetPropertyType,asset的类型,有三种ALAssetTypePhoto, ALAssetTypeVideo or ALAssetTypeUnknown。
另外还可以通过该方法获取ALAssetPropertyLocation(照片位置),ALAssetPropertyDuration(视频时间),ALAssetPropertyDate(照片拍摄日期)等。
可以通过thumbnail方法就是获取该照片。
第二步获取相册下的所有图片:
根据相册获取该相册下所有图片,通过ALAssetsGroup的实例方法得到ALAsset类数组。
ALAssetsGroupEnumerationResultsBlock resultsBlock = ^(ALAsset *asset, NSUInteger index, BOOL *stop) {
if (asset){
UIImage *image=[UIImage imageWithCGImage: asset.thumbnail];//获取该相册的所有照片
[self.imageArray addObject:image];
NSLog(@"image%@",image);
// NSString *type = [asset valueForProperty:ALAssetPropertyType];
//
// if ([type isEqual:ALAssetTypePhoto])
// self.numberOfPhotos ++;
// if ([type isEqual:ALAssetTypeVideo])
// self.numberOfVideos ++;
}
// else if (self.assets.count > 0)
// {
// [self.tableView reloadData];
//
// [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:ceil(self.assets.count*1.0/columns) inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];
// }
};
[self.group enumerateAssetsUsingBlock:resultsBlock]; //self.group 是指一个相册(也就第一步获取相册数组中的一个相册)
此博客是参考 http://my.oschina.net/u/1378445/blog/333052 方法和类分析的很到位,只是改了下代码,亲测可实现。