CGContextShowGlyphsAtPositions
ではなくユニコードを描く場合は、CoreTextが答えです。また、カスタム図面が必要な場合は、[NSString drawAtPoint:withFont:]
よりも優れています。 完全な例を次に示します。
CTLineRef line = CTLineCreateWithAttributedString((CFAttributedStringRef)attributedString);
CFArrayRef runArray = CTLineGetGlyphRuns(line);
//in more complicated cases make loop on runArray
//here I assumed this array has only 1 CTRunRef within
const CTRunRef run = (CTRunRef)CFArrayGetValueAtIndex(runArray, 0);
//do not use CTFontCreateWithName, otherwise you won't see e.g. chinese characters
const CTFontRef font = CFDictionaryGetValue(CTRunGetAttributes(run), kCTFontAttributeName);
CFIndex glyphCount = CTRunGetGlyphCount(run);
CGGlyph glyphs[glyphCount];
CGPoint glyphPositions[glyphCount];
CTRunGetGlyphs(run, CFRangeMake(0, 0), glyphs);
//you can modify positions further
CTRunGetPositions(run, CFRangeMake(0, 0), glyphPositions);
CTFontDrawGlyphs(font, glyphs, glyphPositions, glyphCount, context);
CFRelease(line);
あなたは知っています。それは私のキャラクターをイメージ化する必要がありますが、単純なフォントメトリクスは得られません。現在のコンテキスト( 'UIGraphicsGetCurrentContext')に出入りすることができ、描画の前後に' CGContextGetTextPosition'を使用して基本的にバウンディングボックスの幅を取得できます。それは主に私が派生することに興味があるので、ありがとう! – hkatz
待ち時間、 '[@" a "sizeWithFont:]の何が問題なのですか? なぜ個々の文字に対してメトリックが必要ですか? –
私は各文字に対してsizeWithFontを行うので、メトリックが得られます。 Andrew:文字をテクスチャにキャッシュしたり、パスに沿って描画したりしたいと思うかもしれません。 –