PHCachingImageManager
对Photos的图片或视频资源提供了加载或生成预览缩略图和全尺寸图片的方法,针对预处理巨量的资源进行了优化。
一、概述
当你使用大量的资源时,一个缓存图片管理器可以在后台准备资源图片,为了能使你在稍后的事件请求单个资源时减少延迟。例如,当你想要使用照片或者视频资源的缩略图填充一个集合视图或者类似的页面时可以使用缓存图片管理器。
PHCachingImageManager
类的大部分功能都是它的父类——PHImageManager定义的.
如何使用缓存图片管理器:
- 创建一个
PHCachingImageManager
实例。(这一步取代了使用PHImageManager单例。) - 使用
PHAsset
类方法来加载你需要的资源。 - 为这些资源准备图像,调用
- (void)startCachingImagesForAssets:(NSArray<PHAsset *> *)assets targetSize:(CGSize)targetSize contentMode:(PHImageContentMode)contentMode options:(PHImageRequestOptions *)options;
方法,并传入你在之后单独获取某一个资源时要用的targetSize
,contentMode
和options
。 - 当你需要单独获取某一个资源的图像时,调用
- (PHImageRequestID)requestImageForAsset:(PHAsset *)asset targetSize:(CGSize)targetSize contentMode:(PHImageContentMode)contentMode options:(PHImageRequestOptions *)options resultHandler:(void (^)(UIImage *result, NSDictionary *info))resultHandler;
方法,并且传入你之前预加载时使用的同样的参数。
如果你请求的图像已经准备好了,PHCachingImageManager
会立刻返回这个图像。否则,Photos会准备这个图像并缓存以备下次使用。
二、内容
1. 准备图像
- (void)startCachingImagesForAssets:(NSArray<PHAsset *> *)assets targetSize:(CGSize)targetSize contentMode:(PHImageContentMode)contentMode options:(nullable PHImageRequestOptions *)options;
为以后使用的资源准备图像。
当你调用这个方法,Photos会开始在后台获取图像数据并生成缩略图。在任何时间,你可以使用- (PHImageRequestID)requestImageForAsset:(PHAsset *)asset targetSize:(CGSize)targetSize contentMode:(PHImageContentMode)contentMode options:(PHImageRequestOptions *)options resultHandler:(void (^)(UIImage *result, NSDictionary *info))resultHandler;
方法来请求已经缓存的单个图片。如果Photos已经完成了缓存一组图片,这个方法会立刻提供已经缓存的图像。
Photos使用这个方法中你提供的targetSize
、contentMode
和options
来缓存图片。如果你在之后请求图片时,例如,使用不同的targetSize
调用这个方法,Photos都不会使用已经缓存的图片,而是获取或生成一个新的图片。
- (void)stopCachingImagesForAssets:(NSArray<PHAsset *> *)assets targetSize:(CGSize)targetSize contentMode:(PHImageContentMode)contentMode options:(nullable PHImageRequestOptions *)options;
取消缓存给定的资源的图片。
这个方法通过给定的options
取消对给定的资源的图片缓存。当不再需要这些图片缓存的时候使用这个方法来取消缓存(有可能正在缓存过程中)。例如,如果你为使用缩略图填充一个集合视图而准备图像,这个时候用户选择了一个不同的缩略图尺寸,调用这个方法来取消之前生成的缩略图。
- (void)stopCachingImagesForAllAssets;
取消所有正在进行过程中的图像缓存。
2. 设置缓存策略
@property (nonatomic, assign) BOOL allowsCachingHighQualityImages;
是否缓存高质量图片。
如果设置为YES
,图像管理器将会准备高质量的图像。这个选项将在高性能成本下提供更好的图像。
想要在准备大量的图像的时候有更快更好的性能——比如说用户快速的滑动缩略图集合视图的时候——设置这个属性为NO
。