iOS开发之AssetsLibrary框架使用(二)

简介: iOS开发之AssetsLibrary框架使用

四、ALAssetsGroup资源组对象


   资源组其实就是对应与我们相册中的一组资源,我们可以通过如下的方便遍历出其中的所有资源:


   _library = [[ALAssetsLibrary alloc]init];

   [_library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {

       if (group) { // 遍历相册还未结束

           // 设置过滤器

           [group setAssetsFilter:[ALAssetsFilter allPhotos]];

           if (group.numberOfAssets) {

               [group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {

                   NSLog(@"%d:%@",index,result);

               }];

           }

       } else { // 遍历结束(当group为空的时候就意味着结束)


               NSLog(@"没有相册列表了");

       }


   } failureBlock:^(NSError *error) {

       NSLog(@"失败");

   }];

   ALAssetsGroup中相关方法解析如下:


//获取相关属性

/*

extern NSString *const ALAssetsGroupPropertyName;//组名字

extern NSString *const ALAssetsGroupPropertyType;//组类型

extern NSString *const ALAssetsGroupPropertyPersistentID; //ID

extern NSString *const ALAssetsGroupPropertyURL;//组URL

*/

- (id)valueForProperty:(NSString *)property;

//获取当前组的缩略图海报

- (CGImageRef)posterImage;

//设置过滤器

- (void)setAssetsFilter:(ALAssetsFilter *)filter;

//获取组中资源个数

- (NSInteger)numberOfAssets;

//进行资源枚举

- (void)enumerateAssetsUsingBlock:(ALAssetsGroupEnumerationResultsBlock)enumerationBlock;

/*

typedef NS_OPTIONS(NSUInteger, NSEnumerationOptions) {

   NSEnumerationConcurrent = (1UL << 0),//顺序枚举

   NSEnumerationReverse = (1UL << 1),   //逆序枚举

};

*/

- (void)enumerateAssetsWithOptions:(NSEnumerationOptions)options usingBlock:(ALAssetsGroupEnumerationResultsBlock)enumerationBlock;

- (void)enumerateAssetsAtIndexes:(NSIndexSet *)indexSet options:(NSEnumerationOptions)options usingBlock:(ALAssetsGroupEnumerationResultsBlock)enumerationBlock;

//获取当前组是否允许编辑

@property (nonatomic, readonly, getter=isEditable) BOOL editable;

//向组中添加一个资源

- (BOOL)addAsset:(ALAsset *)asset;

上面有提到资源过滤器,资源过滤器用来设置过滤组中的资源,有3个类方法可以直接获取系统提供的过滤器:


@interface ALAssetsFilter : NSObject {

//所有图片资源

+ (ALAssetsFilter *)allPhotos;

// 所有视频资源

+ (ALAssetsFilter *)allVideos;

// 所有资源

+ (ALAssetsFilter *)allAssets;

@end

五、ALAsset资源对象


   ALAsset是封装好的资源对象类,如下方法可以获取到资源中封装的属性:


- (id)valueForProperty:(NSString *)property;

属性名的定义如下:


//获取资源类型

/*

这个属性将返回一个字符串

extern NSString *const ALAssetTypePhoto//照片类型

extern NSString *const ALAssetTypeVideo//视频类型

extern NSString *const ALAssetTypeUnknown//未知类型

*/

extern NSString *const ALAssetPropertyType;

//会返回一个CLLocation对象 图片的地址信息

extern NSString *const ALAssetPropertyLocation;

//视频资源的时长 NSNumber对象

extern NSString *const ALAssetPropertyDuration;

//资源方向

extern NSString *const ALAssetPropertyOrientation;

//资源日期 会返回NSDate对象

extern NSString *const ALAssetPropertyDate;

下面列举了ALAsset中常用方法:


//获取默认的Representation对象

- (ALAssetRepresentation *)defaultRepresentation;

//获取指定的Representation对象

- (ALAssetRepresentation *)representationForUTI:(NSString *)representationUTI;

//获取资源缩略图

- (CGImageRef)thumbnail;

- (CGImageRef)aspectRatioThumbnail;

//写入图片数据

- (void)writeModifiedImageDataToSavedPhotosAlbum:(NSData *)imageData metadata:(NSDictionary *)metadata completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock;

//写入视频数据

- (void)writeModifiedVideoAtPathToSavedPhotosAlbum:(NSURL *)videoPathURL completionBlock:(ALAssetsLibraryWriteVideoCompletionBlock)completionBlock;

//原始资源对象

@property (nonatomic, readonly) ALAsset *originalAsset;

//是否允许编辑

@property (nonatomic, readonly, getter=isEditable) BOOL editable;

//替换图片数据

- (void)setImageData:(NSData *)imageData metadata:(NSDictionary *)metadata completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock;

//替换视频数据

- (void)setVideoAtPath:(NSURL *)videoPathURL completionBlock:(ALAssetsLibraryWriteVideoCompletionBlock)completionBlock;

六、关于ALAssetRepresentation类


   每一个ALAsset对象中都封装了一个ALAssetRepresentation对象,这个对象的作用是获取资源的详细信息,解析如下:


//获取UTI

- (NSString *)UTI;

//获取资源的尺寸

- (CGSize)dimensions;

//获取资源的大小

- (long long)size;

//读取数据

- (NSUInteger)getBytes:(uint8_t *)buffer fromOffset:(long long)offset length:(NSUInteger)length error:(NSError **)error;

//获取图片数据

- (CGImageRef)fullResolutionImage;

- (CGImageRef)CGImageWithOptions:(NSDictionary *)options;

//获取全屏图片

- (CGImageRef)fullScreenImage;

//获取资源URL

- (NSURL *)url;

//获取资源元数据

- (NSDictionary *)metadata;

//获取资源方向

- (ALAssetOrientation)orientation;

//缩放比

- (float)scale;

//获取资源名称

- (NSString *)filename;

目录
相关文章
|
3天前
|
IDE 开发工具 Android开发
安卓与iOS开发对比:平台选择对项目成功的影响
【9月更文挑战第10天】在移动应用开发的世界中,选择正确的平台是至关重要的。本文将深入探讨安卓和iOS这两大主要移动操作系统的开发环境,通过比较它们的市场份额、开发工具、编程语言和用户群体等方面,为开发者提供一个清晰的指南。我们将分析这两个平台的优势和劣势,并讨论如何根据项目需求和目标受众来做出最佳选择。无论你是初学者还是有经验的开发者,这篇文章都将帮助你更好地理解每个平台的特性,并指导你做出明智的决策。
|
1天前
|
API Android开发 iOS开发
安卓与iOS开发中的线程管理对比
【9月更文挑战第12天】在移动应用的世界中,安卓和iOS平台各自拥有庞大的用户群体。开发者们在这两个平台上构建应用时,线程管理是他们必须面对的关键挑战之一。本文将深入探讨两大平台在线程管理方面的异同,通过直观的代码示例,揭示它们各自的设计理念和实现方式,帮助读者更好地理解如何在安卓与iOS开发中高效地处理多线程任务。
|
3天前
|
开发框架 Android开发 iOS开发
探索安卓与iOS开发的差异:构建未来应用的指南
在移动应用开发的广阔天地中,安卓与iOS两大平台各占半壁江山。本文将深入浅出地对比这两大操作系统的开发环境、工具和用户体验设计,揭示它们在编程语言、开发工具以及市场定位上的根本差异。我们将从开发者的视角出发,逐步剖析如何根据项目需求和目标受众选择适合的平台,同时探讨跨平台开发框架的利与弊,为那些立志于打造下一个热门应用的开发者提供一份实用的指南。
14 5
|
3天前
|
开发工具 Android开发 iOS开发
安卓与iOS开发:平台选择的艺术与科学
在移动应用开发的广阔天地中,安卓与iOS两大平台如同东西方哲学的碰撞,既有共通之处又各具特色。本文将深入探讨这两个平台的设计理念、开发工具和市场定位,旨在为开发者提供一份简明扼要的指南,帮助他们在这场技术与商业的博弈中找到自己的道路。通过比较分析,我们将揭示每个平台的优势与局限,以及它们如何影响应用的性能、用户体验和市场接受度。无论你是初涉江湖的新手,还是经验丰富的老手,这篇文章都将为你的选择提供新的视角和思考。
16 5
|
3天前
|
开发工具 Android开发 Swift
探索安卓与iOS开发的差异:从新手到专家的旅程
在数字时代的浪潮中,移动应用开发已成为连接世界的桥梁。本文将深入探讨安卓与iOS这两大主流平台的开发差异,带领读者从零基础出发,逐步了解各自的特点、开发环境、编程语言及市场策略。无论你是梦想成为移动应用开发者的初学者,还是希望扩展技能边界的资深开发者,这篇文章都将为你提供宝贵的见解和实用的建议。
|
4天前
|
人工智能 Android开发 iOS开发
安卓与iOS开发:平台选择的艺术
在移动应用开发的广阔天地里,安卓和iOS两大操作系统各占半壁江山。本文将深入探讨这两个平台的开发环境、工具及市场趋势,帮助开发者在选择适合自己项目的平台时做出更明智的决策。通过比较各自的优势与局限,我们不仅能更好地理解每个系统的核心特性,还能洞察未来技术发展的脉络。无论你是刚入行的新手还是资深开发者,这篇文章都将为你提供有价值的参考和启示。
18 5
|
4天前
|
开发工具 Android开发 iOS开发
安卓与iOS开发:一场操作系统的较量
在数字时代的浪潮中,安卓和iOS这两大操作系统如同海上的两艘巨轮,各自承载着不同的使命与梦想。本文将深入浅出地探讨这两个系统在开发领域的异同,从用户体验、开发工具、市场趋势等多个维度进行比较分析。通过这场技术的较量,我们可以更好地理解每个系统的优势与局限,以及它们如何影响我们的日常生活和工作。
|
3天前
|
Linux Android开发 iOS开发
探索Android与iOS开发:平台之战还是互补共生?
在移动应用开发的浩瀚宇宙中,Android和iOS这两大星系始终吸引着无数开发者的目光。它们各自拥有独特的引力场,引领着技术潮流的方向。本文将穿梭于这两个平台的星际空间,揭示它们背后的力量对比,以及如何在这两者之间找到平衡点,共同推动移动应用开发的进步。
13 1
|
3天前
|
移动开发 开发框架 Android开发
安卓与iOS开发:平台之战的新篇章
在移动应用开发的广阔天地中,安卓和iOS始终占据着主导地位。本文通过比较这两个平台的发展历程、技术特点及未来趋势,探讨了它们之间的竞争与合作。文章旨在为开发者提供一个清晰的平台选择指南,并预测未来移动开发的可能走向。
11 1
|
8天前
|
安全 编译器 Swift
探索iOS开发之旅:Swift编程语言的魅力与挑战
【9月更文挑战第5天】在iOS应用开发的广阔天地中,Swift作为苹果官方推荐的编程语言,以其简洁、高效和安全的特点,成为了开发者的新宠。本文将带领你领略Swift语言的独特魅力,同时探讨在实际开发过程中可能遇到的挑战,以及如何克服这些挑战,成为一名优秀的iOS开发者。