2009-03-04 1 views
8

Objective-C/Cocoaの使用特定のフォントに基づいて文字列を描画するために必要な幅と高さを計算するにはどうすればよいですか? 。C#の/でネットあなたはこのようにそれを行うことができます。Objective-C/Cocoaで文字列のボーイング矩形をどのように計算しますか?

SizeF textSize = graphics.MeasureString(someString, someFont); 

のObjective-C/Cocoaの中に利用できるようなものはありますか?

答えて

13

はdanielpunkassとピーターHoseyによって与えられた回答に基づいて具体的な例です:私のようなObjective-Cの/ココアに新しいものを例えば

NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:[NSFont fontWithName:@"Helvetica" size:12], NSFontAttributeName, nil]; 
NSAttributedString *text = [[NSAttributedString alloc] initWithString:@"Hello" attributes: attributes]; 
NSSize textSize = [text size]; 

本当に長い道のりを行きます。 C++/Java/C#や、Objective-Cの構文が本当に外国語で書かれていて、AppleがCocoaのドキュメントにサンプルコードを埋め込んでいないため、このことを学ぶのは難しいです。

+2

+ [NSDictionaryのdictionaryWithObjectsAndKeys:]:各ペアの第二のオブジェクトがnil以外である必要があります。または、パラメータリストのnil-terminateを忘れましたか? – Ziggy

6

片道はsizeWithAttributes:であり、danielpunkassはこう述べています。もう1つの方法は、NSAttributedStringを作成し、そのsizeを求めることです。唯一の違いは、片方向ではテキストと属性が一緒になっているオブジェクト(属性付き文字列)が得られますが、一方では別々のものが保持される点です。

7

次のコードは、私は、クロスプラットフォームのテキストのCALayerのために使用するものに似ています。これは、のfontSizeのフォントたfontNameの名前とサイズで、NSStringの名前のテキストのためにあなたにCGSizeを与える

#if defined(TARGET_IPHONE_SIMULATOR) || defined(TARGET_OS_IPHONE) 
    UIFont *theFont = [UIFont fontWithName:fontName size:fontSize]; 
    CGSize textSize = [text sizeWithFont:theFont]; 
#else 
    NSFont *theFont = [NSFont fontWithName:fontName size:fontSize]; 
    CGSize textSize = NSSizeToCGSize([text sizeWithAttributes:[NSDictionary dictionaryWithObject:theFont forKey: NSFontAttributeName]]); 
#endif 

。ここで

0

プレゼンターなどを使用している場合。 UILabel/NSLabel(文字列を要求する代わりに)次に、このオブジェクトに正しいサイズを問い合わせる必要があります。

詳細な分析については、Mike Weller's blog about labelsを参照してください。

+2

NSLabelがありません。 UILabelのCocoaの対応部分はNSTextFieldです( 'Borderered'と' editable'は無効になっています)。 –

0

iOS6の下おお、あなたはこの方法で正しいサイズを取得することができます:

CGSize textSize = [theString sizeWithFont:theFont 
          forWidth:160.0f 
         lineBreakMode:NSLineBreakByWordWrapping];