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

  1. 在 Podfile 中添加pod "YYAsyncLayer"。
  2. 执行pod install或pod update。
  3. 导入 <YYAsyncLayer/YYAsyncLayer.h>。

Carthage

  1. 在 Cartfile 中添加github "ibireme/YYAsyncLayer"。
  2. 执行carthage update --platform ios并将生成的 framework 添加到你的工程。
  3. 导入 <YYAsyncLayer/YYAsyncLayer.h>。

手动安装

  1. 下载 YYAsyncLayer 文件夹内的所有内容。
  2. 将 YYAsyncLayer 内的源文件添加(拖放)到你的工程。
  3. 导入YYAsyncLayer.h。

文档

你可以在 CocoaDocs 查看在线 API 文档,也可以用 appledoc 本地生成文档。

系统要求

该项目最低支持 iOS 6.0。

项目主页:http://www.open-open.com/lib/view/home/1447310094710