https://github.com/gang544043963/LGPhotoBrowser
iOS提供的AssetsLibrary框架是用來讀取和操作本地相冊的,連接了我們應用程序和相冊之間的訪問, 該框架提供一下6個類:ALAssetsLibrary,AssetsLibrary,ALAssetsGroup,ALAsset,ALAssetsFilter,ALAssetRepresentation。
ALAssetsLibrary類可以實現查看相冊列表,增加相冊,保存圖片到相冊等功能。
常用的幾個方法:
1. 獲得相冊的組別(Get the list of groups that match the given types)
[objc]view plaincopy
-?(void)enumerateGroupsWithTypes:(ALAssetsGroupType)typesusingBlock:(ALAssetsLibraryGroupsEnumerationResultsBlock)enumerationBlockfailureBlock:(ALAssetsLibraryAccessFailureBlock)failureBlock;
在這個方法的enumerationBlock中讀取分組列表,包括它的名稱、封面圖片等等。
2. 返回一個ALAsset對象(Returns an ALAsset object in the result block for a URL previously retrieved from an ALAsset object)
[objc]view plaincopy
-?(void)assetForURL:(NSURL*)assetURLresultBlock:(ALAssetsLibraryAssetForURLResultBlock)resultBlockfailureBlock:(ALAssetsLibraryAccessFailureBlock)failureBlock;
3. 和上面類似,返回一個ALAssetsGroup對象
[objc]view plaincopy
-?(void)groupForURL:(NSURL*)groupURLresultBlock:(ALAssetsLibraryGroupResultBlock)resultBlockfailureBlock:(ALAssetsLibraryAccessFailureBlock)failureBlock
沒提供什么方法,就是一個包含其他五個類的一個頭文件
ALAssetsGroup就是相冊組的類,可以通過這個類提供的方法來獲取相冊組的各種信息。
1. 獲得 名稱,類型,ID,NSURL
- (id)valueForProperty:(NSString *)property;
property可以是:
ALAssetsGroupPropertyName(名稱)
ALAssetsGroupPropertyType(類型)
ALAssetsGroupPropertyPersistentID(ID)
ALAssetsGroupPropertyURL (NSURL)
2. 獲得相冊分組的封面圖片
- (CGImageRef)posterImage;
注意使用:
[objc]view plaincopy
//獲取相冊group的封面
cell.imageView.image=?[UIImageimageWithCGImage:[groupposterImage]];
3. 過濾器
- (void)setAssetsFilter:(ALAssetsFilter *)filter
ALAssetsFilter中有這些方法,是過濾類型
[objc]view plaincopy
//?Get?all?photos?assets?in?the?assets?group.
+?(ALAssetsFilter*)allPhotos;
//?Get?all?video?assets?in?the?assets?group.
+?(ALAssetsFilter*)allVideos;
//?Get?all?assets?in?the?group.
+?(ALAssetsFilter*)allAssets;
4. 獲得相冊的組的數量
[objc]view plaincopy
-?(NSInteger)numberOfAssets;
5. 通過相冊組獲取里面的圖片:
[objc]view plaincopy
-?(void)enumerateAssetsUsingBlock:(ALAssetsGroupEnumerationResultsBlock)enumerationBlock;
-?(void)enumerateAssetsWithOptions:(NSEnumerationOptions)optionsusingBlock:(ALAssetsGroupEnumerationResultsBlock)enumerationBlock;
-?(void)enumerateAssetsAtIndexes:(NSIndexSet*)indexSetoptions:(NSEnumerationOptions)optionsusingBlock:(ALAssetsGroupEnumerationResultsBlock)enumerationBlock;
一般使用第一個。
6. 增加圖片
[objc]view plaincopy
-?(BOOL)addAsset:(ALAsset*)asset
上面說過了,提供了三種過濾方法:
[objc]view plaincopy
//?Get?all?photos?assets?in?the?assets?group.
+?(ALAssetsFilter*)allPhotos;
//?Get?all?video?assets?in?the?assets?group.
+?(ALAssetsFilter*)allVideos;
//?Get?all?assets?in?the?group.
+?(ALAssetsFilter*)allAssets;
ALAssetRepresentation對象封裝了一個給定ALAsset對象的陳述
直接上代碼說明問題。參考點擊打開鏈接
[objc]view plaincopy
//獲取資源圖片的詳細資源信息
ALAssetRepresentation*?representation?=?[assetdefaultRepresentation];
//獲取資源圖片的長寬
CGSize?dimension?=?[representationdimensions];
//獲取資源圖片的高清圖
[representationfullResolutionImage];
//獲取資源圖片的全屏圖
[representationfullScreenImage];
//獲取資源圖片的名字
NSString*?filename?=?[representationfilename];
NSLog(@"filename:%@",filename);
//縮放倍數
[representationscale];
//圖片資源容量大小
[representationsize];
//圖片資源原數據
[representationmetadata];
//旋轉方向
[representationorientation];
//資源圖片url地址,該地址和ALAsset通過ALAssetPropertyAssetURL獲取的url地址是一樣的
NSURL*?url?=?[representationurl];
NSLog(@"url:%@",url);
//資源圖片uti,唯一標示符
NSLog(@"uti:%@",[representationUTI]);
照片類,這里要說的就是
[objc]view plaincopy
-?(id)valueForProperty:(NSString*)property;
property有如下類型:
1.ALAssetPropertyType資源的類型(照片,視頻)
2.ALAssetPropertyLocation資源地理位置(無位置信息返回null)
3.ALAssetPropertyDuation播放時長(照片返回ALErorInvalidProperty)
4.ALAssetPropertyOrientation方向(共有8個方向,參見:ALAssetOrientation)
5.ALAssetPropertyDate 拍攝時間(包含了年與日時分秒)
6.ALAssetPropertyRepresentations描述(打印看了下,只有帶后綴的名稱)
7.ALAssetPropertyURLs(返回一個字典,鍵值分別是文件名和文件的url)
8.ALAssetPropertyAssetURL文件的url
得到縮略圖
[objc]view plaincopy
-?(CGImageRef)thumbnail;
以上是AssetsLibrary框架中所有類的說明。
相冊瀏覽器/選擇器/照相機Demo:LGPhotoBrowser