iOS相册实现与AssetsLibrary框架使用
概述
在iOS中如果想要獲取手機相冊里面的圖片或者視頻的話就要用到系統自帶的AssetsLibrary框架,AssetsLibrary.framework中包含以下文件
#import <AssetsLibrary/ALAsset.h> #import <AssetsLibrary/ALAssetsFilter.h> #import <AssetsLibrary/ALAssetsGroup.h> #import <AssetsLibrary/ALAssetsLibrary.h> #import <AssetsLibrary/ALAssetRepresentation.h>ALAsset.h
從本地相冊獲取的圖片或者視頻的對象都是ALAsset類型的對象。ALAssetsFilter
顧名思義是對本地所有資源的過濾篩選,可以選擇只獲取照片,只獲取視頻,或者獲取所有的資源。ALAssetsGroup
本地相冊分組對象,本地有多少個相薄就會有幾個ALAssetsGroup類型的對象。ALAssetsLibrary
本地資源庫對象ALAssetRepresentation
ALAssetRepresentation對象來獲取視頻或者圖片的url,文件名,二進制數據,封面縮略圖等
AssetsLibrary使用
使用前導入AssetsLibrary.framework
獲取本地所有相薄
初始化ALAssetsLibrary對象并使用下面的方法來獲取本地所有相薄
- (void)enumerateGroupsWithTypes:(ALAssetsGroupType)types usingBlock:(ALAssetsLibraryGroupsEnumerationResultsBlock)enumerationBlock failureBlock:(ALAssetsLibraryAccessFailureBlock)failureBlocktypes 相薄分組類型
ALAssetsGroupType蘋果官方文檔定義如下
enumerationBlock 對本地相薄進行遍歷并返回遍歷結果
ALAssetsLibraryGroupsEnumerationResultsBlock定義如下
failureBlock 遍歷失敗
ALAssetsLibraryAccessFailureBlock定義如下
代碼示例
typedef void (^albumGroupsBlock)(NSMutableArray *groups); -(void)setupAlbumGroups:(albumGroupsBlock)albumGroups //獲取所有相薄成功后回調 {NSMutableArray *groups = @[].mutableCopy; //所有相薄數組ALAssetsFilter* assstsFilter = [ALAssetsFilter allAssets]; //篩選器獲取所有資源ALAssetsLibraryGroupsEnumerationResultsBlock resultBlock = ^(ALAssetsGroup *group, BOOL *stop){ //每次遍歷成功后回調if (group) {[group setAssetsFilter:assstsFilter];NSInteger groupType = [[group valueForProperty:ALAssetsGroupPropertyType] integerValue];if (groupType == ALAssetsGroupSavedPhotos) {[groups insertObject:group atIndex:0]; //默認相機膠卷放入數組第一位}else {if (group.numberOfAssets>0) {[groups addObject:group];}}}else //當返回的group為nil表示已經遍歷結束{if (albumGroups) {albumGroups([groups copy]);}}};ALAssetsLibraryAccessFailureBlock failureBlock = ^(NSError *error) {if (albumGroups) { //遍歷失敗回調albumGroups([groups copy]);}};;[[[ALAssetsLibrary alloc] init] enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:resultBlock failureBlock:failureBlock]; //開始遍歷 }獲取本地每個相薄中的資源
初始化ALAssetsGroup對象并使用下面的方法來獲取相薄中的資源
- (void)enumerateAssetsWithOptions:(NSEnumerationOptions)options usingBlock:(ALAssetsGroupEnumerationResultsBlock)enumerationBlockoptions遍歷相薄中資源的順序
NSEnumerationOptions定義如下
enumerationBlock對相薄里資源進行遍歷并返回遍歷結果
ALAssetsGroupEnumerationResultsBlock resultBlock = ^(ALAsset *asset, NSUInteger index, BOOL *stop) {};代碼示例
typedef void (^albumAssetsBlock)(NSMutableArray *assets); -(void)setupAlbumAssets:(ALAssetsGroup *)group withAssets:(albumAssetsBlock)albumAssets {NSMutableArray *assets = @[].mutableCopy; //相薄中所有資源數組ALAssetsFilter* assstsFilter = [ALAssetsFilter allAssets]; //篩選器獲取所有資源[group setAssetsFilter:assstsFilter]; //相冊內資源總數NSInteger assetCount = [group numberOfAssets]; //相薄中資源總數ALAssetsGroupEnumerationResultsBlock resultBlock = ^(ALAsset *asset, NSUInteger index, BOOL *stop) { //資源為ALAsset類型對象if (asset) {[assets addObject:asset];NSString *assetType = [asset valueForProperty:ALAssetPropertyType];if ([assetType isEqualToString:ALAssetTypePhoto]) {//資源類型為圖片}else if ([assetType isEqualToString:ALAssetTypeVideo]) {//資源類型為視頻}}else if (assets.count >= assetCount){if (albumAssets) {albumAssets([assets copy]);}};};[group enumerateAssetsWithOptions:NSEnumerationReverse usingBlock:resultBlock];//開始遍歷相薄中資源 }實現效果
示例代碼
https://github.com/GGGHub/AlbumPicker
轉載于:https://www.cnblogs.com/itrena/p/5927109.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的iOS相册实现与AssetsLibrary框架使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Codeforces Round #32
- 下一篇: 汽车镀铬亮条怎样弄成亚光的?