优雅的创建一个相册管理类(兼容AssetsLibrary和PhotoKit)

在这篇文章的基础上,我github开源了一个自定义相册,进行了大量优化以及封装,配合着demo去看,会更容易理解。地址:https://github.com/lovisty/YFPhotoAlbum


越来越多的app选择图片的时候,放弃iOS默认的界面,使用自定义相册去展示,并供用户选择。做到这些,肯定少不了一个获取相册分组和每个分组里的图片的类,这里要展示一下一个Mange应该做的工作。

主要有两个工作,第一,获取相册分组。第二获取每个分组里的照片信息。这里针对iOS8之前的ALAssetsLibrary 和之后的PhotoKit进行阐述。

ALAssetsLibrary

先陈述一下几个类的意义

ALAssetsLibrary:
可以实现查看相册列表,增加相册分组,保存图片到相册等功能。


ALAssetsGroup:
包含了相册分组的信息,分组名称,分组类型,封面图片,分组内资源的数量等信息。


ALAsset:
包含了某个分组里的资源文件,以及图片缩略图,资源类型等其他资源信息。


ALAssetRepresentation:
是通过ALAsset的 defaultRepresentation 方法获取的一个类。
包含了资源文件的更加详细的信息,比如,大小,尺寸,高清图等。
如果在 ALAsset 里找不到,那就到 ALAssetRepresentation 里去逛逛吧,总有新的发现。

看看效(mei)果(nv):
这里写图片描述

show代码

.h 文件

#import <Foundation/Foundation.h>
#import <AssetsLibrary/AssetsLibrary.h>

typedef void(^AssetsLibraryInfoBlock)(NSArray *groupArray);
typedef void(^ALAssetsBlock)(NSArray *photoArray);

@interface PXPhotoAlbumManger : NSObject

@property (nonatomic, strong) ALAssetsLibrary *assetsLibrary;
@property (nonatomic, copy) AssetsLibraryInfoBlock  assetsLibraryInfo; //获取分组列表信息
@property (nonatomic, copy) ALAssetsBlock  photosInfoBlock; //获取分组里面的资源信息

- (void)allPhotoGroup:( ALAssetsGroupType )groupType  assetsLibraryInfo:(AssetsLibraryInfoBlock)assetsLibraryInfo ALAssetsoInfo:(ALAssetsBlock)ALAssetsoInfo;

- (void)allPhotoInALAssetsGroup:(ALAssetsGroup *)assetsGroup ALAssetsoInfo:(ALAssetsBlock)ALAssetsoInfo;

.m 文件


获取所有分组信息,并获取其中一个指定的分组里的资源

- (void)allPhotoGroup:( ALAssetsGroupType )groupType  assetsLibraryInfo:(AssetsLibraryInfoBlock)assetsLibraryInfo ALAssetsoInfo:(ALAssetsBlock)ALAssetsoInfo{

    NSMutableArray *groupArray = [NSMutableArray array];

    self.assetsLibrary = [[ALAssetsLibrary alloc] init];
    @weakify(self)
    [self.assetsLibrary enumerateGroupsWithTypes:groupType usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
      @strongify(self)
        if (group) {
            if ([group numberOfAssets] > 0) {
                [groupArray addObject:group];
            }
        }else{
            NSArray *resultArray = [[groupArray reverseObjectEnumerator] allObjects];
            assetsLibraryInfo(resultArray);
            //第一次默认遍历第一个相册分组 用于默认展示
            [self allPhotoInALAssetsGroup:[resultArray firstObject] ALAssetsoInfo:^(NSArray *photosInfoArray) {
                ALAssetsoInfo(photosInfoArray);
            }];
        }
    } failureBlock:^(NSError *error) {

    }];
}

获取指定分组里的资源信息

- (void)allPhotoInALAssetsGroup:(ALAssetsGroup *)assetsGroup ALAssetsoInfo:(ALAssetsBlock)ALAssetsoInfo{
    NSMutableArray *assetsArray = [NSMutableArray array];
    [assetsGroup enumerateAssetsWithOptions:NSEnumerationReverse usingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {

        if (result != nil) {
            [assetsArray addObject:result];
        }else{
            ALAssetsoInfo(assetsArray);
        
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值