ALAssetsLibrary

? 一個app大多數情況下都會有設置頭像的功能,這就涉及到了訪問相冊問題,下面著重介紹這兩個類。

AssetsLibrary 組成介紹

? AssetsLibrary:代表整個相冊資源庫,包含圖片和視頻

? ALAssetsGroup: 代表一個相冊

? ALAsset:代表一張照片對象或者視頻對象

? ALAssetRepresentation:沒有用過,查閱的資料ALAssetRepresentation 是對 ALAsset 的封裝,可以得到相片兩種格式,一種是raw,一種是jpeg。

相冊使用流程

? AssetsLibrary->ALAssetsGroup->ALAsset 這個流程就是說我們要通過AssetsLibrary獲取到相冊的集合,在通過相冊去得到資源。下面上代碼片段

導入庫文件#import<ALAssetsLibrary/ALAssetsLibrary.h>

ALAssetsLibrary* library = [[ALAssetsLibrary alloc] init];

[library enumerateGroupsWithTypes:ALAssetsGroupAll

usingBlock:libraryGroupsEnumeration

failureBlock:failureblock];

這段代碼我們可以獲得所有的相冊,在ALAssetsLibrary中所有對象的獲取都是通過回掉,那么就有人問了,什么時候知道回掉結束呢,我開始的時候也蒙蔽了,后來請教老大,發現了一句最關鍵的話:When the enumeration is done, 'enumerationBlock' will be called with group set to nil.
要知道回掉結束直接判斷group是否是空,這樣我們就可以獲取所有的相冊集合,可以做相冊分欄展示,不過大多數都是全部展示,管他什么分不分相冊瀏覽

libraryGroupsEnumeration = ^(ALAssetsGroup* group,BOOL* stop){

if (group != nil) {

self.numberOfAssets = group.numberOfAssets;//有多少張照片

[group enumerateAssetsWithOptions:NSEnumerationReverse usingBlock:groupEnumerAtion];//NSEnumerationReverse 按照最近時間排序

}

};

? 下一步,得到了相冊集合就可以獲取資源了撒。

? ALAssetsGroupEnumerationResultsBlock groupEnumerAtion = ^(ALAsset *result,NSUInteger index, BOOL *stop){

if (result!=NULL) {

if ([[result valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypePhoto]) {

NSString *urlstr = [NSString stringWithFormat:@"%@",result.defaultRepresentation.url];

[self addImageData:urlstr withThumbnail:[UIImage imageWithCGImage:result.thumbnail]];//獲取相冊的小圖

} else {

self.numberOfAssets -=1;

}

}

};

這段代碼就是獲取相冊展示的小圖

? 這是獲取高清或者全圖的實現代碼

- (void)fetchfullResolutionImageWithURL:(NSString *)urlStr

withComplete:(void(^)(NSError *error,UIImage *image))resutls {

ALAssetsLibrary *assetLibrary = [[ALAssetsLibrary alloc] init];

NSURL *url=[NSURL URLWithString:urlStr];

[assetLibrary assetForURL:url resultBlock:^(ALAsset *asset) {

UIImage *image = [UIImage imageWithCGImage:asset.defaultRepresentation.fullScreenImage];

resutls(nil,image);

// asset = nil;

} failureBlock:^(NSError *error) {

resutls(error,nil);

}];

}

? 這就是圖片獲取的3段式,沒有其他繁瑣的步驟.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容