CoreText小结

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] )
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值