? 一個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段式,沒有其他繁瑣的步驟.