https://developer.apple.com/documentation/coretext // 官方文档
CoreText 简介
CoreText 是用于处理文字和字体的底层技术。
它直接和Core Graphics(又被称为 Quartz)打交道。Quartz 是一个 2D 图形渲染引擎,能够处理 OSX 和 iOS 中图形显示问题。Quartz 能够直接处理字体(font)和字形(glyphs),将文字渲染到界面上,它是基础库中唯一能够处理字形的模块。因此 CoreText 为了排版,需要将显示的文字内容、位置、字体、字形直接传递给 Quartz。与其他UI 组件相比,由于 CoreText 直接和 Quartz 来交互,所以它具有更高效的排版功能。
Core Text 的布局作业通常需要由属性字符串(CFAttributedStringRef)和图形路径(CGPathRef)共同完成。CFAttributedStringRef包含需要绘制的字符串、字符的样式属性(如颜色、字体)。Core Text 中的排版机制使用其中的信息,完成字符到字形的转换。
CGPathRef 定义了文本绘制区域的形状、在 OS X 10.7 和 iOS 3.2 及更高版本中,路径可以是非矩形的。
CoreText 使用
CoreText 的绘制步聚如下:
使用coretext就是先有一个要显示的 string,然后定义这个 string 每个部分的样式 -> attributedString -> 生成 CTFramesetter-> 生成 CTFrame -> 绘制 (CTFrameDraw、CTLineDraw、CTRunDraw)
CTFrameDraw:
CTFrameDraw(ctFrame, context);
CTLineDraw:
CFArrayRef lines = CTFrameGetLines(ctFrame);
NSInteger numberOfLines = CFArrayGetCount(lines);
CTLineRef line = CFArrayGetValueAtIndex(lines, lineIndex);
CTLineDraw(line, context);
CTRunDraw:
CFArrayRef runs = CTLineGetGlyphRuns(line);
long runCounts = CFArrayGetCount(runs);
CTRunRef run = CFArrayGetValueAtIndex(runs, j);
CTRunDraw(run, context, CFRangeMake(0, 0));
使用 CoreText 来绘制异形文字区域
效果图如下:
Core Text 文本的绘制方向 (kCTTypesetterOptionForcedEmbeddingLevel )
NSAttributedString 一些常用属性
在 context 中绘制固定大小的 line
效果如下:
coretext的具体使用请移至 https://github.com/Avery-AN/TableView