iOS开发笔记

ALAssetsLibrary

2016-05-28  本文已影响1188人  lvzhehappy

  一个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段式,没有其他繁琐的步骤.

上一篇下一篇

猜你喜欢

热点阅读