3

ヘジ仲間、

私は現在、それらを手動でカスタムUIViewに描画するために、文字および/またはそれらの複数をCGPathRefに変換しようとしています。この小さなスニペットを含む CoreText と Framesetter を試してみましたが、うまくいかないようです....

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

CTFrameGetPathCTFrameフレームの描画によって生成されたパスではなく、に外接するパスを返します。後の描画パフォーマンスを向上させるためにパスをキャッシュしているため、上記のことを行っていると思いますか? (CTFrameカスタムビューに簡単に描画できるため)。

本当に を取得したい場合はCGPath、 までドリルダウンしてからCGGlyphを使用する必要がありますCTFontCreatePathForGlyph。テキストをすばやく再描画したいだけなら、後で再利用するためにこれをCGLayer(not CALayer) withに描画するでしょう。CTFrameDraw

それでも本当にCGPathグリフが必要な場合は、低レベルのテキスト レンダリング をご覧ください。必要なコードはそこにあります。

于 2011-09-16T16:40:07.243 に答える