基本原理 https://www.cnblogs.com/purple-sweet-pottoes/p/5109413.html
CoreText(一):基本用法 https://blog.csdn.net/xiaoxiaobukuang/article/details/52368694
参考 https://www.cnblogs.com/XYQ-208910/p/6222931.html
CoreText进阶
每一行是一个 Line , 每个 Line 中可能有多个 Run
1、图文混排 CTFrameRef textFrame // coreText 的 frame CTLineRef line // coreText 的 line CTRunRef run // line 中的部分文字 2、相关方法: CFArrayRef CTFrameGetLines(CTFrameRef frame) //获取包含CTLineRef的数组 void CTFrameGetLineOrigins(CTFrameRef frame,CFRange range,CGPoint origins[])//获取所有CTLineRef的原点 CFRange CTLineGetStringRange(CTLineRef line) //获取line中文字在整段文字中的Range CFArrayRef CTLineGetGlyphRuns(CTLineRef line)//获取line中包含所有run的数组 CFRange CTRunGetStringRange(CTRunRef run)//获取run在整段文字中的Range CFIndex CTLineGetStringIndexForPosition(CTLineRef line,CGPoint position)//获取点击处position文字在整段文字中的index CGFloat CTLineGetOffsetForStringIndex(CTLineRef line,CFIndex charIndex,CGFloat* secondaryOffset)//获取整段文字中charIndex位置的字符相对line的原点的x值