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);
4

1 回答 1

7

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

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

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

于 2011-09-16T16:40:07.243 回答