1 Line 每一行
Run 每一行的具体绘制单元,相同属性的为一个Run,特殊情况是即便属性相同,但中英文不会为同一个Run
2 相关函数
1
获取frame的所有line
CFArrayRef CTFrameGetLines(
CTFrameRef frame )
获取所有line的位置
void CTFrameGetLineOrigins(
CTFrameRef frame,
CFRange range,
CGPoint origins[_Nonnull] )
2
获取line的高度
double CTLineGetTypographicBounds(
CTLineRef line,
CGFloat * _Nullable ascent,
CGFloat * _Nullable descent,
CGFloat * _Nullable leading )
获取line的所有run
CFArrayRef CTLineGetGlyphRuns(
CTLineRef line )
获取line范围,值是具体的字符下标,类似-[NSString rangeOfString:]
CFRange CTLineGetStringRange(
CTLineRef line )
获取line的初始位置,结果单位是pt,即从字符的index获取字符具体的位置(在某个line中),比如第二个参数是CTRunGetStringRange结果的location,则结果是该run的在line的起始位置。
CGFloat CTLineGetOffsetForStringIndex(
CTLineRef line,
CFIndex charIndex,
CGFloat * _Nullable secondaryOffset )
获取position的index,即从位置转换到对于字符的下标,和
CTLineGetOffsetForStringIndex正好相反。获得的结果是相对framesetter而已,即逐渐增大的。
CFIndex CTLineGetStringIndexForPosition(
CTLineRef line,
CGPoint position )
获取偏移,flushFactor0表示左对齐,0.5居中,1右对齐,如果居中对齐,其实就是用flushWidth减去line的实际宽度再除以2
double CTLineGetPenOffsetForFlush(
CTLineRef line,
CGFloat flushFactor,
double flushWidth )
3
获取run的所有Glyph个数,Glyph就是一个个具体字符
CFIndex CTRunGetGlyphCount(
CTRunRef run )
获取run的范围,类似CTLineGetStringRange,该range是相对整个framesetter而已的(即后续的逐渐变大)
CFRange CTRunGetStringRange(
CTRunRef run )
获取run的高度
double CTRunGetTypographicBounds(
CTRunRef run,
CFRange range,
CGFloat * _Nullable ascent,
CGFloat * _Nullable descent,
CGFloat * _Nullable leading )
获取Run的起始位置,功能类似CTLineGetOffsetForStringIndex,不过后者需要先要通过CTRunGetStringRange计算run的range,再计算位置。
void CTRunGetPositions(
CTRunRef run,
CFRange range,
CGPoint buffer[_Nonnull] )