在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等。