HTRasterView 是一个基于状态的缓存渲染组件的渲染系统。相对于 Core Animation 的渲染,具有以下优点
请参阅相关的博客文章:http://engineering.hoteltonight.com/asynchronous-state-aware-component-rasterizat
这个库依赖于 MindSnacks 的 Javier Soto 的 MSCachedAsyncViewDrawing 类。推荐安装方法是 cocoapods,它会自动处理此依赖项。将以下行添加到您的 Podfile
pod 'HTRasterView'
首先,实现 HTRasterizableView 协议。在演示项目中提供了一个简单的示例(HTExampleRasterizableComponent)。唯一必需的方法是
- (NSArray *)keyPathsThatAffectState;
这个方法用于两个目的
初始化 HTStateAwareRasterImageView,并将 rasterizableView 属性设置为您的 HTRasterizableView,如下面的演示项目代码片段所示
_rasterizableComponent = [[HTExampleRasterizableComponent alloc] init];
_rasterView = [[HTRasterView alloc] init];
_rasterView.rasterizableView = _rasterizableComponent;
_rasterView.delegate = self;
[self addSubview:_rasterView];
如果您的组件可以利用 UIImage 边缘(固定大小的角落和可扩展的中心),则在 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;
演示项目有四个标签页
用于定义组件状态的缓存键由NSObject+HTPropertyHash类生成。确保hash方法生成一个与属性状态唯一对应的字符串,但不要过于独特,包括诸如指针值等。在那个类别中对CGColorRef的例外是因为我们只想描述RGBA值,而不包括指针值加上RGBA值。
给作者 @jakejennings 发推文,并查看HotelTonight的 engineering博客:http://engineering.hoteltonight.com
还有,看看HotelTonight的其它iOS开源项目