對(duì)Photos的圖片或視頻資源提供了加載或生成預(yù)覽縮略圖和全尺寸圖片的方法,針對(duì)預(yù)處理巨量的資源進(jìn)行了優(yōu)化。
一、概述
當(dāng)你使用大量的資源時(shí),一個(gè)緩存圖片管理器可以在后臺(tái)準(zhǔn)備資源圖片,為了能使你在稍后的事件請(qǐng)求單個(gè)資源時(shí)減少延遲。例如,當(dāng)你想要使用照片或者視頻資源的縮略圖填充一個(gè)集合視圖或者類似的頁(yè)面時(shí)可以使用緩存圖片管理器。
PHCachingImageManager類的大部分功能都是它的父類——PHImageManager定義的.
如何使用緩存圖片管理器:
- 創(chuàng)建一個(gè)
PHCachingImageManager實(shí)例。(這一步取代了使用PHImageManager單例。) - 使用
PHAsset類方法來加載你需要的資源。 - 為這些資源準(zhǔn)備圖像,調(diào)用
- (void)startCachingImagesForAssets:(NSArray<PHAsset *> *)assets targetSize:(CGSize)targetSize contentMode:(PHImageContentMode)contentMode options:(PHImageRequestOptions *)options;方法,并傳入你在之后單獨(dú)獲取某一個(gè)資源時(shí)要用的targetSize,contentMode和options。 - 當(dāng)你需要單獨(dú)獲取某一個(gè)資源的圖像時(shí),調(diào)用
- (PHImageRequestID)requestImageForAsset:(PHAsset *)asset targetSize:(CGSize)targetSize contentMode:(PHImageContentMode)contentMode options:(PHImageRequestOptions *)options resultHandler:(void (^)(UIImage *result, NSDictionary *info))resultHandler;方法,并且傳入你之前預(yù)加載時(shí)使用的同樣的參數(shù)。
如果你請(qǐng)求的圖像已經(jīng)準(zhǔn)備好了,PHCachingImageManager會(huì)立刻返回這個(gè)圖像。否則,Photos會(huì)準(zhǔn)備這個(gè)圖像并緩存以備下次使用。
二、內(nèi)容
1. 準(zhǔn)備圖像
- (void)startCachingImagesForAssets:(NSArray<PHAsset *> *)assets targetSize:(CGSize)targetSize contentMode:(PHImageContentMode)contentMode options:(nullable PHImageRequestOptions *)options;
為以后使用的資源準(zhǔn)備圖像。
當(dāng)你調(diào)用這個(gè)方法,Photos會(huì)開始在后臺(tái)獲取圖像數(shù)據(jù)并生成縮略圖。在任何時(shí)間,你可以使用- (PHImageRequestID)requestImageForAsset:(PHAsset *)asset targetSize:(CGSize)targetSize contentMode:(PHImageContentMode)contentMode options:(PHImageRequestOptions *)options resultHandler:(void (^)(UIImage *result, NSDictionary *info))resultHandler;方法來請(qǐng)求已經(jīng)緩存的單個(gè)圖片。如果Photos已經(jīng)完成了緩存一組圖片,這個(gè)方法會(huì)立刻提供已經(jīng)緩存的圖像。
Photos使用這個(gè)方法中你提供的targetSize、contentMode和options來緩存圖片。如果你在之后請(qǐng)求圖片時(shí),例如,使用不同的targetSize調(diào)用這個(gè)方法,Photos都不會(huì)使用已經(jīng)緩存的圖片,而是獲取或生成一個(gè)新的圖片。
- (void)stopCachingImagesForAssets:(NSArray<PHAsset *> *)assets targetSize:(CGSize)targetSize contentMode:(PHImageContentMode)contentMode options:(nullable PHImageRequestOptions *)options;
取消緩存給定的資源的圖片。
這個(gè)方法通過給定的options取消對(duì)給定的資源的圖片緩存。當(dāng)不再需要這些圖片緩存的時(shí)候使用這個(gè)方法來取消緩存(有可能正在緩存過程中)。例如,如果你為使用縮略圖填充一個(gè)集合視圖而準(zhǔn)備圖像,這個(gè)時(shí)候用戶選擇了一個(gè)不同的縮略圖尺寸,調(diào)用這個(gè)方法來取消之前生成的縮略圖。
- (void)stopCachingImagesForAllAssets;
取消所有正在進(jìn)行過程中的圖像緩存。
2. 設(shè)置緩存策略
@property (nonatomic, assign) BOOL allowsCachingHighQualityImages;
是否緩存高質(zhì)量圖片。
如果設(shè)置為YES,圖像管理器將會(huì)準(zhǔn)備高質(zhì)量的圖像。這個(gè)選項(xiàng)將在高性能成本下提供更好的圖像。
想要在準(zhǔn)備大量的圖像的時(shí)候有更快更好的性能——比如說用戶快速的滑動(dòng)縮略圖集合視圖的時(shí)候——設(shè)置這個(gè)屬性為NO。