CTLine是由CTRun组成的。
我们通过以下几个方面来看看CTRun
1.Glyph Run Types
2Glyph Run Access
1.Glyph Run Types
CFTypeID CTRunGetTypeID( void ) 获取CTRunRef 的 CFTypeID
|
|
2.Glyph Run Access
CTRunGetGlyphCount (CTRunRef run ) | 获取run的字体个数 |
---|---|
CFDictionaryRef CTRunGetAttributes(CTRunRef run ) | 获取run的属性 |
CTRunStatus CTRunGetStatus(CTRunRef run ) | 获取 status 不知道这个干嘛用(就是获取run的状态,只看出来 kCTRunStatusRightToLeft 的用法 其他的没看出来) |
const CGGlyph * __nullable CTRunGetGlyphsPtr(CTRunRef run ) | 获取一个CGGlyph 指针数组 |
void CTRunGetGlyphs(CTRunRef run,CFRange range,CGGlyph buffer[] ) | 获取数据CGGlyph 在范围range |
const CGPoint * __nullable CTRunGetPositionsPtr(CTRunRef run ) | 获取每个glyph 字体的起始位置数组 |
void CTRunGetPositions(CTRunRef run,CFRange range,CGPoint buffer[] ) | 获取数据获取数据CGGlyph位置 在范围range |
const CGSize * __nullable CTRunGetAdvancesPtr(CTRunRef run ) | 获取CGGlyph 的大小数组 |
void CTRunGetAdvances(CTRunRef run,CFRange range,CGSize buffer[] ) | 获取数据获取数据CGGlyph大小 在范围range |
const CFIndex * __nullable CTRunGetStringIndicesPtr(CTRunRef run ) | 获取CGGlyph 在整个字符串index数组的大小数组 |
void CTRunGetStringIndices(CTRunRef run,CFRange range,CFIndex buffer[] ) | 获取数据获取数据CGGlyph在整个字符串index处数组 在范围range |
CFRange CTRunGetStringRange(CTRunRef run ) | 获取run在字符串中的range |
double CTRunGetTypographicBounds(CTRunRef run,CFRange range,CGFloat __ nullable ascent,CGFloat nullable descent,CGFloat * nullable leading ) | 获取run 在范围range的的相关信息 返回宽度 |
CGRect CTRunGetImageBounds( CTRunRef run,CGContextRef __nullable context,CFRange range ) | 获取一个rect 具体是怎么样子不知道(这个同ctline相关函数一样获取的是图片大小) |
CGAffineTransform CTRunGetTextMatrix(CTRunRef run ) | 获取run 的二维矩阵 |
void CTRunDraw(CTRunRef run,CGContextRef context,CFRange range ) | 绘制run 位置什么的不变。 |
代码
|
|
从run 的api中可以看出,run 是CGGlyph 组成的。CGGlayph可以用来创建字体。
CTRun CTLine CTFrame CTFrameSetter 这些就可以完成文本的布局了。
难点攻关
kCTRunStatusRightToLeft
|
|
截图