質問する前に、これは Apple のドキュメント re: how to determine the width of a string using Quartz: からのものです。
アプリケーションにとってテキストの測定値が重要な場合は、Quartz 2D 関数を使用してそれらを計算することができます。とはいえ、文字のレイアウトや採寸に強みを持つATSUIをまずは検討してみてはいかがでしょうか。ATSUI には、テキスト メトリックを取得する関数がいくつかあります。レイアウト後のテキスト メトリックを取得できるだけでなく、必要に応じて、レイアウト前のテキスト メトリックを取得することもできます。自分で計算しなければならない Quartz とは異なり、ATSUI は測定値を計算します。たとえば、ATSUI 関数 ATSUMeasureTextImage を呼び出すことによって、テキストのイメージ境界四角形を取得できます。
Quartz のテキストが ATSUI (または Cocoa) よりもニーズに適していると判断した場合は、次の手順に従って、Quartz がテキストを描画する前にテキストの幅を測定できます。
- 関数 CGContextGetTextPosition を呼び出して、現在のテキスト位置を取得します。
- 関数 CGContextSetTextDrawingMode を使用して、テキスト描画モードを kCGTextInvisible に設定します。
- 関数 CGContextShowText を呼び出してテキストを描画し、現在のテキスト位置にテキストを描画します。
- 関数 CGContextGetTextPosition を呼び出して、最終的なテキスト位置を決定します。
- テキストの幅を決定するには、終了位置から開始位置を引きます。
ここに私の質問があります:
これは本当に Core Graphics を使用して文字列の幅を決定する最良の方法ですか? 私のテキストは 2D グラフィック要素と共存しているので、すべてのレンダリングに同じコンテキストを使用したいと考えています。次のようなコンパクトな方法があることを望んでいました。
CGContextGetTextWidthAndHeight(context, text);
ATSUI は時代遅れで、Core Text に置き換わろうとしていると読みました。それは本当ですか?もしそうなら、それはiOSにありますか?