iOS资源库AssetsLibrary

本文介绍了iOS中已过时的AssetsLibrary框架,尽管在iOS9后被Photos框架替代,但依然有其历史价值。主要内容包括ALAssetsLibrary的五个核心类:ALAssetsLibrary、ALAssetsGroup、ALAsset、ALAssetRepresentation和ALAssetsFilter,以及它们之间的关系。此外,还提到了授权和在info.plist中添加权限声明的必要性,以及如何遍历相册和根据URL获取资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写这篇文章的时间已经有点晚了,目前iOS支持的最低版本已经为iOS8了,而AssetsLibrary这个框架在iOS9已经支持了改为Photos代替使用(稍后会写文章介绍Photos),然而这并不影响,我们记录它的演化过程,AssetsLibrary框架也很小,思路很清晰整理一下以备回顾。
AssetsLibrary主要有五个类组成ALAssetsLibrary、ALAssetsGroup、ALAsset、ALAssetRepresentation、ALAssetsFilter,它们的关系大概是这样的(箭头从属关系):
关系图
AssetsLibrary包含了所有的图片和视频
ALAssetsGroup可以理解为相册,里面可以是图片也可以是视频,可以通过它增加某个相册的资源。
ALAssetsFilter为ALAssetsGroup设置过滤条件,返回图片、视频或者两者都返回。
ALAsset一个包装对象,它包装的可能是图片也可能是视频。
ALAssetRepresentation 是对ALAsset的详细描述,有很多属性例如:URL,对象的size,thumbnail缩略图,文件名等都可以获取到。
下面直接上代码分别介绍:
一、ALAssetsLibrary
使用ALAssetsLibrary是需要授权的,尤其是xcode8以后需要在info.plist里面添加key和描述如:
Privacy - Photo Library Usage Description : 是否允许xxx使用您的相册?

//ALAsset方向 NS_ENUM_DEPRECATED_IOS(4_0, 9_0)
typedef NS_ENUM(NSInteger, ALAssetOrientation) {
    ALAssetOrientationUp , // 默认方向
    ALAssetOrientationDown,// 向下
    ALAssetOrientationLeft ,// 向左
    ALAssetOrientationRight, //向右
    ALAssetOrientationUpMirrored , // 图像沿水平方向,向上翻转    
    ALAssetOrientationDownMirrored,  // 图像沿水平方向,向下翻转
    ALAssetOrientationLeftMirrored ,  //图像沿垂直方向,向左翻转
    ALAssetOrientationRightMirrored , //图像沿垂直方向,向右翻转
}

//相簿类型
enum {
    ALAssetsGroupLibrary,//从iTunes 来的相册内容
    ALAssetsGroupAlbum, //设备自身产生或从iTunes同步来的照片,包括其他软件产生的。
    ALAssetsGroupEvent, // itun上有变动的照片
    ALAssetsGroupFaces,// 尚不清楚
    ALAssetsGroupSavedPhotos, //相机胶卷照片
    ALAssetsGroupPhotoStream, //照片流ios5以后出现
    ALAssetsGroupAll,// ALAssetsGroupAll 获取所有不为空的相册
};typedef NSUInteger ALAssetsGroupType

//ALAssetsLibrary授权状态
typedef NS_ENUM(NSInteger, ALAuthorizationStatus) {
    ALAuthorizationStatusNotDetermined = 0, // 用户还没有做出选择这个应用程序的问候
    ALAuthorizationStatusRestricted,        // 这个应用程序没有被授权访问照片数据。当前用户不能改变应用程序的状态,是受限制的。如家长控制权限
    ALAuthorizationStatusDenied,            // 用户已拒绝该应用程序访问照片数据
    ALAuthorizationStatusAuthorized         // 用户已授权该应用可以访问照片数据
}
//先进行鉴权
ALAuthorizationStatus status = [ALAssetsLibrary authorizationStatus];

ALAssetsLibrary的使用方法:
1、根据ALAssetsGroupType遍历相册(ALAssetsGroup没有快捷的创建方式,说明ALAssetsGroup一般都是从系统遍历获取,或者是URL获取):

ALAssetsLibrary *library = [[ALAssetsLibrary alloc]init];
    [library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
        ALAssetsFilter *filter = [ALAssetsFilter allPhotos];
        [group setAssetsFilter:filter];
        if ([group numberOfAssets]) {
            NSURL *url = [group valueForProperty:ALAssetsGroupPropertyURL];
            [self enumerateGroupWithURL:url];
            *stop = YES;
        }
    } failureBlock:^(NSError *error) {
        NSLog(@"%@",error);
    }];

根据URL获取ALAssetsGroup或ALAsset
1、获取相册

    [library groupForURL:groupUrl resultBlock:^(ALAssetsGroup *group) {
        [group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
          ALAssetRepresentation *representiaon =  [result defaultRepresentation];
          //获取图片大小单位B
            long long size = [representiaon size];
            NSLog(@"%lld",size);
        }];
    } failureBlock:^(NSError *error) {
        NSLog(@"%@",error);
    }];

2、获取ALAsset(通常搭配相机回调使用,保存图片)

[libarary writeImageToSavedPhotosAlbum:image.CGImage metadata:metadate completionBlock:^(NSURL *assetURL, NSError *error) {
            [libarary assetForURL:assetURL resultBlock:^(ALAsset *asset) {
                ALAssetRepresentation *representation = [asset defaultRepresentation];
                NSString *filedName = [representation filename];
            } failureBlock:^(NSError *error) {
                NSLog(@"%@",error);
            }];
        }];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值