2011-09-16 3 views
2

HEJ мужиков,Получить CGPath из текста

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

ответ

6

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

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

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

Смежные вопросы