Получить CGPath из текста - PullRequest
       43

Получить CGPath из текста

2 голосов
/ 16 сентября 2011

Ребята,

В настоящее время я пытаюсь преобразовать букву и / или несколько из них в 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 Ответ

6 голосов
/ 16 сентября 2011

CTFrameGetPath возвращает путь, описанный CTFrame, а не путь, созданный при рисовании рамки. Я предполагаю, что вы делаете выше, потому что вы кэшируете пути, чтобы улучшить производительность рисования позже? (Поскольку CTFrame может легко нарисовать себя в пользовательском представлении).

Если вы действительно хотите получить CGPath, вам нужно детализировать до CGGlyph, а затем использовать CTFontCreatePathForGlyph. Если вы просто хотите быстро перерисовать текст, я бы, вероятно, нарисовал его в CGLayer (не CALayer) с CTFrameDraw для последующего повторного использования.

Если вы по-прежнему действительно хотите CGPath для глифов, взгляните на Низкоуровневое отображение текста . Код, который вам нужен, там.

...