ALAssetsLibrary

作者: lvzhehappy | 来源:发表于2016-05-28 20:47 被阅读1188次

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

    相关文章

      网友评论

        本文标题:ALAssetsLibrary

        本文链接:https://www.haomeiwen.com/subject/lajklttx.html