一个app大多数情况下都会有设置头像的功能,这就涉及到了访问相册问题,下面着重介绍这两个类。
AssetsLibrary 组成介绍
AssetsLibrary:代表整个相册资源库,包含图片和视频
ALAssetsGroup: 代表一个相册
ALAsset:代表一张照片对象或者视频对象
ALAssetRepresentation:没有用过,查阅的资料ALAssetRepresentation 是对 ALAsset 的封装,可以得到相片两种格式,一种是raw,一种是jpeg。
相册使用流程
AssetsLibrary->ALAssetsGroup->ALAsset 这个流程就是说我们要通过AssetsLibrary获取到相册的集合,在通过相册去得到资源。下面上代码片段
导入库文件#import<ALAssetsLibrary/ALAssetsLibrary.h>
ALAssetsLibrary* library = [[ALAssetsLibrary alloc] init];
[library enumerateGroupsWithTypes:ALAssetsGroupAll
usingBlock:libraryGroupsEnumeration
failureBlock:failureblock];
这段代码我们可以获得所有的相册,在ALAssetsLibrary中所有对象的获取都是通过回掉,那么就有人问了,什么时候知道回掉结束呢,我开始的时候也蒙蔽了,后来请教老大,发现了一句最关键的话:When the enumeration is done, 'enumerationBlock' will be called with group set to nil.
要知道回掉结束直接判断group是否是空,这样我们就可以获取所有的相册集合,可以做相册分栏展示,不过大多数都是全部展示,管他什么分不分相册浏览
libraryGroupsEnumeration = ^(ALAssetsGroup* group,BOOL* stop){
if (group != nil) {
self.numberOfAssets = group.numberOfAssets;//有多少张照片
[group enumerateAssetsWithOptions:NSEnumerationReverse usingBlock:groupEnumerAtion];//NSEnumerationReverse 按照最近时间排序
}
};
下一步,得到了相册集合就可以获取资源了撒。
ALAssetsGroupEnumerationResultsBlock groupEnumerAtion = ^(ALAsset *result,NSUInteger index, BOOL *stop){
if (result!=NULL) {
if ([[result valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypePhoto]) {
NSString *urlstr = [NSString stringWithFormat:@"%@",result.defaultRepresentation.url];
[self addImageData:urlstr withThumbnail:[UIImage imageWithCGImage:result.thumbnail]];//获取相册的小图
} else {
self.numberOfAssets -=1;
}
}
};
这段代码就是获取相册展示的小图
这是获取高清或者全图的实现代码
- (void)fetchfullResolutionImageWithURL:(NSString *)urlStr
withComplete:(void(^)(NSError *error,UIImage *image))resutls {
ALAssetsLibrary *assetLibrary = [[ALAssetsLibrary alloc] init];
NSURL *url=[NSURL URLWithString:urlStr];
[assetLibrary assetForURL:url resultBlock:^(ALAsset *asset) {
UIImage *image = [UIImage imageWithCGImage:asset.defaultRepresentation.fullScreenImage];
resutls(nil,image);
// asset = nil;
} failureBlock:^(NSError *error) {
resutls(error,nil);
}];
}
这就是图片获取的3段式,没有其他繁琐的步骤.
网友评论