iOS 异步绘制与显示的工具类:YYAsyncLayer
jopen
9年前
iOS 异步绘制与显示的工具类。
(该工具是从 YYText 提取出来的独立组件)
简单用法
@interface YYLabel : UIView @property NSString *text; @property UIFont *font; @end @implementation YYLabel - (void)setText:(NSString *)text { _text = text.copy; [YYTransaction transactionWithTarget:self selector:@selector(contentsNeedUpdated)]; } - (void)setFont:(UIFont *)font { _font = font; [YYTransaction transactionWithTarget:self selector:@selector(contentsNeedUpdated)]; } - (void)layoutSubviews { [super layoutSubviews]; [YYTransaction transactionWithTarget:self selector:@selector(contentsNeedUpdated)]; } - (void)contentsNeedUpdated { // do update [self setNeedsDisplay]; } #pragma mark - YYAsyncLayer + (Class)layerClass { return YYAsyncLayer.class; } - (YYAsyncLayerDisplayTask *)newAsyncDisplayTask { // capture current state to display task NSString *text = _text; UIFont *font = _font; YYAsyncLayerDisplayTask *task = [YYAsyncLayerDisplayTask new]; task.willDisplay = ^(CALayer *layer) { //... }; task.display = ^(CGContextRef context, CGSize size, BOOL(^isCancelled)(void)) { if (isCancelled()) return; NSArray *lines = CreateCTLines(text, font, size.width); if (isCancelled()) return; for (int i = 0; i < lines.count; i++) { CTLineRef line = line[i]; CGContextSetTextPosition(context, 0, i * font.pointSize * 1.5); CTLineDraw(line, context); if (isCancelled()) return; } }; task.didDisplay = ^(CALayer *layer, BOOL finished) { if (finished) { // finished } else { // cancelled } }; return task; } @end
安装
Cocoapods
- 在 Podfile 中添加pod "YYAsyncLayer"。
- 执行pod install或pod update。
- 导入 <YYAsyncLayer/YYAsyncLayer.h>。
Carthage
- 在 Cartfile 中添加github "ibireme/YYAsyncLayer"。
- 执行carthage update --platform ios并将生成的 framework 添加到你的工程。
- 导入 <YYAsyncLayer/YYAsyncLayer.h>。
手动安装
- 下载 YYAsyncLayer 文件夹内的所有内容。
- 将 YYAsyncLayer 内的源文件添加(拖放)到你的工程。
- 导入YYAsyncLayer.h。
文档
你可以在 CocoaDocs 查看在线 API 文档,也可以用 appledoc 本地生成文档。
系统要求
该项目最低支持 iOS 6.0。