最近做了一下获取iPhone相册图片的事,看了一些ALAssetsLibrary相关的文章,受了些启发。不过对于其中的一些文章,我们大可善意地去相信作者还是想帮助我们的。
ALAssetsLibrary是一个很有用的家伙,因为它能取各种资源,图片、视频,等等。笔者也是初学者,不敢大放厥词,这里把我实现的代码贴出来,请大家指点。只是取图片。
先创建了一个类,只有一个属性:NSMutableArray *photos; 用来存放取到的图片。然后就可以在.m文件中写下面这个方法。
中间的注释部分,是可以对self.photos进行操作的函数插入点。
#pragma mark - 通过ALAssetsLibrary获取相册所有图片
-(void)getAllPhotosFromSysAlbum {
static int counter = 0;
if(!self.photos) _photos = [NSMutableArray array];
else [self.photos removeAllObjects];
NSMutableArray *assetURLDictionaries = [[NSMutableArray alloc] init];
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
NSMutableArray *assetGroup = [[NSMutableArray alloc] init];
void (^assetEnumerator)(ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop){
if (result) {
if ([[result valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypePhoto]) {
[assetURLDictionaries addObject:[result valueForProperty:ALAssetPropertyURLs]];
NSURL *url = (NSURL *)[[result defaultRepresentation] url];
[library assetForURL:url resultBlock:^(ALAsset *asset){
[self.photos addObject:[UIImage imageWithCGImage:[[asset defaultRepresentation] fullScreenImage]]];
if (self.photos.count == counter) {
//这个地方就取到了图片,可以打印self.photos验证。
//可以在这里添加对图片的操作,展示或什么的,图片都保存在了self.photos数组里面。
}
}failureBlock:^(NSError *err){
NSLog(@"%@",err.description);
}];
}
}
};
void (^assetGroupEnumerator) (ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop){
if(group){
[group enumerateAssetsUsingBlock:assetEnumerator];
[assetGroup addObject:group];
counter = [group numberOfAssets];
}
};
assetGroup = [[NSMutableArray alloc] init];
[library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:assetGroupEnumerator failureBlock:^(NSError *err){
NSLog(@"%@",err.description);
}];
}
最后,本人初学,还请各位大神不吝赐教。谢谢!
ALAssetsLibrary获取相册图片