iOS中CoreText的使用

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

下一篇 使用CoreText异步绘制label


【 请勿直接转载 - 节约能源从你我做起 】

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.iOS中的round、ceil、floor函数略解 round如果参数是小数,则求本身的四舍五入.ceil如果...
    K_Gopher阅读 1,254评论 1 0
  • 目前社交类型的App也是层出不穷,无论是QQ的说说,还是微信的动态,微博的帖子。这种类型的App都会涉及到点赞文本...
    墨香茉香阅读 714评论 0 3
  • CoreText是一个进阶的比较底层的布局文本和处理字体的技术,CoreText API在OS X v10.5 和...
    smalldu阅读 13,796评论 18 129
  • CoreText 是用于处理文字和字体的底层技术。它直接和 Core Graphics(又被称为 Quartz)打...
    SpursGo阅读 1,948评论 0 2
  • iOS没有现成的支持图文混排的控件,而要用多个基础控件组合拼成图文混排这样复杂的排版,是件很苦逼的事情。对此的解决...
    清风沐沐阅读 740评论 0 2

友情链接更多精彩内容