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