7

Core Text でテキスト行の境界を見つけようとしています。簡単にするために、単一の文字があると仮定します。現時点では、次の方法を使用しています。

line = CTLineCreateWithAttributedString(attrString);
rect = CTLineGetImageBounds(line, context);

ほとんどの場合は機能しますが、math italic d (Unicode: 0x1D451) や math italic q (Unicode: 0x1D45E) などの一部の文字では、幅が少し短くなります。

CTLineGetTypographicBounds()またはを使用してみCTFramesetterSuggestFrameSizeWithConstraintsましたが、どちらも役に立ちませんでした (グラフィックの幅ではなく、グリフの前進を使用して幅を見つけていると思います)。フォント自体が斜体ではないため、傾斜角を使用してこれを修正することもできません。 .

グリフに直接アクセスして を使用しようとしCTFontCreatePathForGlyph()ましたが、CGGlyph と UniChar はどちらも 16 ビットであり、32 ビット文字が必要であるため失敗しました。

私が何か間違ったことをしているかどうかは誰にもわかりますか?もしそうなら、正しい方法は何ですか?

アップデート:

フォントの問題ではないことを確認するために、別のフォントを使用しました。この問題は、Arial Italic の ASCII 文字にも存在します。

アップデート:

以前の更新は無視してください。これ (Arial Italic の問題) は私自身のバグであることがわかりました。ただし、最初の問題はまだ残っています。

4

2 に答える 2

3

私が作成したバグ レポートによると、これは明らかに CoreText の問題であり、まれに発生します。修正が見つかり次第お知らせします。

更新: 2012 年 3 月 15 日

これをすぐに更新するのを忘れていましたが、これは修正されました。修正は OS X Lion / iOS 5 にあります。

于 2010-05-31T23:52:38.953 に答える
1

私が知る限り、CTLineGetImageBounds使用する正しい機能です。RadarWebにバグ レポートを提出することをお勧めします。

于 2010-05-08T03:37:43.327 に答える