日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS相册实现与AssetsLibrary框架使用

發布時間:2024/10/12 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

#import <AssetsLibrary/AssetsLibrary.h>

獲取本地所有相薄

初始化ALAssetsLibrary對象并使用下面的方法來獲取本地所有相薄

- (void)enumerateGroupsWithTypes:(ALAssetsGroupType)types usingBlock:(ALAssetsLibraryGroupsEnumerationResultsBlock)enumerationBlock failureBlock:(ALAssetsLibraryAccessFailureBlock)failureBlock

types 相薄分組類型
ALAssetsGroupType蘋果官方文檔定義如下

enum {ALAssetsGroupLibrary NS_ENUM_DEPRECATED_IOS(4_0, 9_0) = (1 << 0),// The Library group that includes all assets.ALAssetsGroupAlbum NS_ENUM_DEPRECATED_IOS(4_0, 9_0) = (1 << 1),// All the albums synced from iTunes or created on the device.ALAssetsGroupEvent NS_ENUM_DEPRECATED_IOS(4_0, 9_0) = (1 << 2),// All the events synced from iTunes.ALAssetsGroupFaces NS_ENUM_DEPRECATED_IOS(4_0, 9_0) = (1 << 3),// All the faces albums synced from iTunes.ALAssetsGroupSavedPhotos NS_ENUM_DEPRECATED_IOS(4_0, 9_0) = (1 << 4),// The Saved Photos album. #if __IPHONE_5_0 <= __IPHONE_OS_VERSION_MAX_ALLOWEDALAssetsGroupPhotoStream NS_ENUM_DEPRECATED_IOS(5_0, 9_0) = (1 << 5),// The PhotoStream album. #endifALAssetsGroupAll NS_ENUM_DEPRECATED_IOS(4_0, 9_0) = 0xFFFFFFFF,// The same as ORing together all the available group types, };

enumerationBlock 對本地相薄進行遍歷并返回遍歷結果
ALAssetsLibraryGroupsEnumerationResultsBlock定義如下

ALAssetsLibraryGroupsEnumerationResultsBlock resultBlock = ^(ALAssetsGroup *group,BOOL *stop) {};

failureBlock 遍歷失敗
ALAssetsLibraryAccessFailureBlock定義如下

ALAssetsLibraryAccessFailureBlock failureBlock = ^(NSError *error) {};

代碼示例

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)enumerationBlock

options遍歷相薄中資源的順序
NSEnumerationOptions定義如下

typedef NS_OPTIONS(NSUInteger, NSEnumerationOptions) {NSEnumerationConcurrent = (1UL << 0), // 并發讀取相冊中的資源,順序不確定NSEnumerationReverse = (1UL << 1), //倒序讀取相冊中的資源 };

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框架使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。