HTStateAwareRasterImageView 1.1.4

HTStateAwareRasterImageView 1.1.4

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
发布上次发布2014年12月

未声明 维护。



  • 作者:
  • Jacob Jennings

概述

HTStateAwareRasterImageView 是一个基于状态的缓存渲染组件的栅格化系统。相比 Core Animation 的栅格化,其优点是每个独特的状态只绘制一次组件。也支持异步绘制。相关博客文章在 http://engineering.hoteltonight.com/asynchronous-state-aware-component-rasterizat

安装

该库依赖于 MindSnacks 的 Javier Soto 的 MSCachedAsyncViewDrawing 类。推荐的安装方法是 Cocoapods,它将自动处理这个依赖。将以下行添加到您的 Podfile 中

pod 'HTStateAwareRasterImageView'

https://cocoapods.org.cn

使用方法

首先,实现 HTRasterizableView 协议。在演示项目中提供了一个简单的示例(HTExampleRasterizableComponent)。唯一的必需方法是

- (NSArray *)keyPathsThatAffectState;

这用于以下两个目的

  • 监听指定的关键路径以触发图像再生
  • 生成组件状态的哈希值

初始化 HTStateAwareRasterImageView 并将 rasterizableView 属性设置为您的 HTRasterizableView,例如演示项目中的以下代码片段

_rasterizableComponent = [[HTExampleRasterizableComponent alloc] init];
_stateAwareRasterImageView = [[HTStateAwareRasterImageView alloc] init];
_stateAwareRasterImageView.rasterizableView = _rasterizableComponent;
_stateAwareRasterImageView.delegate = self;
[self addSubview:_stateAwareRasterImageView];

如果您的组件可以利用 UIImage caps(固定大小的角落和可拉伸的中心),这些两个方法在 HTRasterizableView 协议上是可选的

- (UIEdgeInsets)capEdgeInsets;
- (BOOL)useMinimumFrameForCaps;

您可以指定是否要在主线程上同步绘制

@property (nonatomic, assign) BOOL drawsOnMainThread;

您还可以禁用键值观察,如果希望手动再生图像(用于预渲染资源)

@property (nonatomic, assign) BOOL kvoEnabled; 
// For prerendering only
- (void)regenerateImage:(HTSARIVVoidBlock)complete;

还提供了一个代理属性,以便在再生图像时通知您,当它获取新的图像时

@property (atomic, assign) id<HTStateAwareRasterImageViewDelegate> delegate;

对于调试目的,缓存键可以通过此方法获取。

- (NSString *)cacheKey;

演示项目

演示项目有四个标签页

  • 使用 HTStateAwareRasterImageView 的表视图
  • 显示缓存键、实际大小和单元格高度大小的缓存图像的表视图
  • 使用相同组件但有栅格化而不使用栅格化的表视图
  • 使用相同组件但启用 Core Animation 栅格化的表视图

HotelTonight HotelTonight

限制

哈希

用于定义组件状态缓存的密钥由NSObject+HTPropertyHash类别生成。确保哈希方法生成的字符串是您属性状态的唯一标识,但不能过分独特,包括指针值等。在那个类别中对CGColorRef的例外处理是因为我们只想描述RGBA值,而不是指针值加上RGBA值。

使用它?喜欢/讨厌它?

给作者 @jakejennings 发推文,并查看HotelTonight的工程博客:http://engineering.hoteltonight.com

另外,查看HotelTonight的其他iOS开源项目