一个轻量级的零配置 iOS 图片缓存,用 Objective-C 编写。还有一个 Swift 版本。
Haneke 可以调整图片大小并缓存结果在内存和磁盘上。所有操作都在后台完成,允许快速响应的滚动。要求 Haneke 加载、调整大小、缓存和显示一个大小合适的图片就像这样
[imageView hnk_setImageFromURL:url];
真的
NSCache
的一级内存缓存。UIImageView
分类来使用缓存,针对 UITableView
和 UICollectionView
细胞重用进行了优化。使用 CocoaPods
pod 'Haneke', '~> 1.0'
或者,您可以直接将 Haneke 目录中的文件添加到您的项目中。
UIImageView
分类Haneke 为 UIImageView
提供方便的方法,并针对 UITableView
和 UICollectionView
细胞重用进行了优化。图片会根据需要调整大小,并在共享缓存中缓存。
// Setting a remote image
[imageView hnk_setImageFromURL:url];
// Setting a local image
[imageView hnk_setImageFromFile:path];
// Setting an image manually. Requires you to provide a key.
[imageView hnk_setImage:image withKey:key];
上面的代码行负责
UIImageView
的 bounds
和 contentMode
),磁盘访问在后台进行。NSURLCache
中检索。UIImageView
被重用,不做任何事情。通过定义缓存格式来定制缓存行为。每个图像视图都有一个默认格式,您也可以定义自己的格式。格式可以通过其名称唯一标识。
每个图像视图都会在需要时创建一个默认格式。默认格式配置如下:
bounds
相匹配。contentMode
进行缩放。不建议修改默认格式。相反,可以像这样设置自己的自定义格式:
HNKCacheFormat *format = [HNKCache sharedCache].formats[@"thumbnail"];
if (!format)
{
format = [[HNKCacheFormat alloc] initWithName:@"thumbnail"];
format.size = CGSizeMake(320, 240);
format.scaleMode = HNKScaleModeAspectFill;
format.compressionQuality = 0.5;
format.diskCapacity = 1 * 1024 * 1024; // 1MB
format.preloadPolicy = HNKPreloadPolicyLastSession;
}
imageView.hnk_cacheFormat = format;
要将相同的自定义格式应用于各种图像视图,必须使用相同的格式实例。上面的示例通过仅在自定义格式尚未在共享缓存中注册时初始化来自定义格式来实现这一点。在最后一行中,图像视图类别会处理在必要时将格式注册到共享缓存中。
可以通过将 diskCapacity
属性设置为大于 0 的值来为格式设置磁盘缓存。当磁盘容量超过时,Haneke 将负责从磁盘缓存中逐出格式中最近最少使用的图像。
在注册格式时,Haneke 将根据格式的预加载策略将磁盘上缓存的图像加载到内存缓存中(无、一些或全部)。可用的预加载策略包括:
HNKPreloadPolicyNone
:不会预加载图像。HNKPreloadPolicyLastSession
:仅预加载上一次会话中的图像。HNKPreloadPolicyAll
:预加载所有图像。如果预加载完成之前就请求对应格式的图像,Haneke 将取消预加载以给请求优先级。为了保证这一功能的最大性能,建议在启动时注册格式。预加载仅适用于具有磁盘缓存的格式。
预加载仅适用于具有磁盘缓存的格式。
格式可以有自己的代码块,在原始图像缩放前后调用:分别叫做 preResizeBlock
和 postResizeBlock
。两者都接收一个键和对应的图像。例如:
format.postResizeBlock = ^UIImage* (NSString *key, UIImage *image) {
UIImage *roundedImage = [image imageByRoundingCorners];
return roundedImage;
};
这些代码块只有在请求的图像不在缓存中时才会调用。当使用图像视图类别或直接使用缓存的异步方法时,它们将在后台执行。
Haneke 提供了有用的日志记录,默认是 关闭 的。您可以在演示中看到其效果。
要打开日志记录,必须将预处理器宏 HANEKE_DEBUG
设置为 1。推荐的做法是将 HANEKE_DEBUG=1
添加到 预处理器宏 编译设置中。如果您直接包含 Haneke,将其添加到您的项目目标中。如果您使用 CocoaPods,将其添加到 Pods 项目中的 Pods-Haneke 目标。
Haneke 需要 iOS 7.0 或更高版本和 ARC。
通过非常少的 更改 可以实现与 iOS 6 的兼容性。您可以使用 @shkutkov 的 分支,该分支通过用 AFNetworking 替换 NSURLSession
来实现这一点。
版权所有 2014 Hermes Pique (@hpique)
遵循Apache许可证2.0版本(以下简称“许可证”);除非遵守许可证规定,否则不得使用此文件。您可以在以下地址获取许可证副本:
https://apache.ac.cn/licenses/LICENSE-2.0
除非适用的法律要求或书面同意,否则在许可证下分发的软件是按“原样”提供的,不提供任何形式的明示或暗示的保证。具体的权限和限制请参阅许可证。