iOS之相冊新框架<Photos/Photos.h>

在iOS8.0以后,蘋果推出了管理相冊的新框架,在熟悉以往的相冊框架的情況下,再來看看新框架剛開始可能有點(diǎn)兒不適應(yīng),但是慢慢的了解之后,你便會發(fā)現(xiàn),新框架讓我們處理相冊的選擇性更多,這個(gè)道理只有我們對新框架足夠熟悉才會有這樣的感覺;信息爆炸的時(shí)代,技術(shù)日新月異,唯有時(shí)刻學(xué)習(xí)的精神才能與時(shí)俱進(jìn);下面簡單介紹一下新框架的應(yīng)用。

一、判斷是否對相冊及相機(jī)有使用權(quán),在這里就只貼出鏈接:判斷相冊相機(jī)的使用權(quán)限

二、幾個(gè)常用的類

1、PHPhotoLibrary,相冊的監(jiān)聽者,顧名思義,能監(jiān)聽相冊的變化,簡而言之,當(dāng)我們將照片存入本地相冊的時(shí)候,這個(gè)類便會發(fā)揮其作用,是一個(gè)單例。

創(chuàng)建監(jiān)聽者:[[PHPhotoLibrary sharedPhotoLibrary] registerChangeObserver:self];

移除監(jiān)聽者:[[PHPhotoLibrary sharedPhotoLibrary] unregisterChangeObserver:self];

相冊變化的回調(diào),即我們的數(shù)據(jù)更新變化在這個(gè)方法中。

// This callback is invoked on an arbitrary serial queue. If you need this to be handled on a specific queue, you should redispatch appropriately

- (void)photoLibraryDidChange:(PHChange *)changeInstance;

2、PHFetchResult,相冊管理類,通過這個(gè)這類我們能獲取到系統(tǒng)相冊及用戶自定義相冊。獲取系統(tǒng)相冊:

PHFetchResult *smartAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];?

獲取用戶自定義相冊:

PHFetchResult *userAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeSmartAlbumUserLibrary options:nil];?

3、PHAssetCollection,相冊對象類,即我們需要對單個(gè)相冊做處理以獲得相冊的相關(guān)參數(shù),比如相冊名、該相冊包含的照片數(shù)量等。

獲取單個(gè)相冊:(假設(shè)為collection)

[smartAlbum enumerateObjectsUsingBlock:^(PHAssetCollection * _Nonnull collection, NSUInteger idx, BOOLBOOL * _Nonnull stop) {//在這里我們需要對collection做處理? ? ? }];? [userAlums enumerateObjectsUsingBlock:^(PHAssetCollection * _Nonnull collection, NSUInteger idx, BOOLBOOL * _Nonnull stop) {

//在這里我們需要對collection做處理? }];

對collection做處理如下

- (PHFetchResult *)fetchAssetsInAssetCollection:(PHAssetCollection *)assetCollection ascending:(BOOL)ascending? {? ? ? PHFetchOptions *option = [[PHFetchOptions alloc] init];? ? ? option.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:ascending]];? ? ? PHFetchResult *result = [PHAsset fetchAssetsInAssetCollection:assetCollection options:option];? ? ? return result;? }?

4、PHAsset,這個(gè)類相當(dāng)于一張照片的實(shí)體,但是我們必須通過處理才能變成可見的照片,拿到一張照片的asset便如老框架拿到一張照片的本地路徑url。

-(void)getImageByAsset:(PHAsset *)asset makeSize:(CGSize)size makeResizeMode:(PHImageRequestOptionsResizeMode)resizeMode completion:(void (^)(UIImage *))completion{? ? ? ? ? ? PHImageRequestOptions *option = [[PHImageRequestOptions alloc] init];? ?

/**? ? ? resizeMode:對請求的圖像怎樣縮放。有三種選擇:None,不縮放;Fast,盡快地提供接近或稍微大于要求的尺寸;Exact,精準(zhǔn)提供要求的尺寸。? ? ? deliveryMode:圖像質(zhì)量。有三種值:Opportunistic,在速度與質(zhì)量中均衡;HighQualityFormat,不管花費(fèi)多長時(shí)間,提供高質(zhì)量圖像;FastFormat,以最快速度提供好的質(zhì)量。? ? ? 這個(gè)屬性只有在 synchronous 為 true 時(shí)有效。? ? ? */? ?

option.resizeMode = resizeMode;//控制照片尺寸? ? ? //option.deliveryMode = PHImageRequestOptionsDeliveryModeOpportunistic;//控制照片質(zhì)量? ? ? //option.synchronous = YES;? ? ? option.networkAccessAllowed = YES;? ? ? //param:targetSize 即你想要的圖片尺寸,若想要原尺寸則可輸入PHImageManagerMaximumSize? ? ? [[PHCachingImageManager defaultManager] requestImageForAsset:asset targetSize:size contentMode:PHImageContentModeAspectFit options:option resultHandler:^(UIImage * _Nullable image, NSDictionary * _Nullable info) {? ? ? ? ? completion(image);? ? ? }];? ? }

5、還有PHFetchOptions、PHCachingImageManager、PHImageReqestOptions等。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容