从文本中获取 CGPath

Posted

技术标签:

【中文标题】从文本中获取 CGPath【英文标题】:Get CGPath from Text 【发布时间】:2011-09-16 15:46:20 【问题描述】:

Hej 研究员,

我目前正在尝试将一个字母和/或多个字母转换为 CGPathRef,以便手动将它们绘制到自定义 UIView 中。我尝试了 CoreText 和 Framesetters 的方法,包括这个小 sn-p,但它似乎不起作用....

NSAttributedString *stringToDraw = [[NSAttributedString alloc] initWithString:content
                                                                       attributes:nil];

    // now for the actual drawing
    CGContextRef context = UIGraphicsGetCurrentContext();

    // flip the coordinate system

    // draw
    CTFramesetterRef frameSetter = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)stringToDraw);
    CTFrameRef frame = CTFramesetterCreateFrame(frameSetter, CFRangeMake(0, 0), NULL, NULL);

    return CTFrameGetPath(frame);

【问题讨论】:

【参考方案1】:

CTFrameGetPath 返回的是包围CTFrame 的路径,而不是绘制框架生成的路径。我假设您正在执行上述操作是因为您正在缓存路径以提高以后的绘图性能? (因为CTFrame 可以轻松地将自己绘制到自定义视图中)。

如果你真的想得到CGPath,你需要一直钻到CGGlyph,然后使用CTFontCreatePathForGlyph。如果您只是想快速重绘文本,我可能会将其绘制成 CGLayer(不是 CALayer)和 CTFrameDraw 以供以后重用。

如果您仍然真的想要 CGPath 用于字形,请查看 Low-level text rendering。你需要的代码在里面。

【讨论】:

以上是关于从文本中获取 CGPath的主要内容,如果未能解决你的问题,请参考以下文章

如何从 KivyMD 文本字段中获取文本?

如何从文本框中获取特定文本并传输到另一个文本框?

从光标位置的文本框中获取文本.net

从具有前缀的文本输入布局内的编辑文本中获取文本

MFC如何从文本框中获取数字

从多个文本框中获取文本