从文本获取CGPath

3

大家好,

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

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个回答

7
CTFrameGetPath 返回的是围绕 CTFrame 的路径,而不是绘制框架生成的路径。我猜你这样做是因为你正在缓存路径以提高后续绘制性能?(由于 CTFrame 可以轻松地在自定义视图中绘制)。
如果您真的想获得 CGPath,则需要一直钻取到 CGGlyph,然后使用 CTFontCreatePathForGlyph。如果您只想快速重绘文本,则可能会使用 CGLayer(而不是 CALayer)和 CTFrameDraw 绘制,并进行后续重用。
如果您仍然真的需要字形的 CGPath,请查看低级文本渲染。您需要的代码就在那里。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接