2009-07-10 4 views
3

アップルのdrawTextInRectのドキュメントは、これが可能であることを示しているようです:UILabelのtextのサイズを変更するために、UILabelのdrawTextInRectメソッドをオーバーライドすることはできますか?

"このメソッドが呼び出されるまでに、現在のグラフィックスコンテキストはデフォルトの環境と描画用のテキスト色で既に設定されています。現在のコンテキストをさらに設定してから、実際の描画を行うためにsuperを呼び出すか、自分で描画を行うことができます。テキストをレンダリングする場合は、superを呼び出すべきではありません。

しかし、私のUILabelサブクラスから下の例に関係なく、私が指定した内容テキストサイズ変更しないようにテキストのサイズが発生することはありません(私はを確認しまし呼ばなっです)。正しい文脈をつかまえているのだろうか、それとももっと大きなものを見逃しているのだろうか?

- (void)drawTextInRect:(CGRect)rect{ 

    CGContextRef theContext = UIGraphicsGetCurrentContext(); 
    CGContextSetFontSize(theContext, 32.0); // <-- doesn't change text size 

    [super drawTextInRect:rect]; 
} 

注 - テキストのサイズは、私は、テキストについて変更する必要が唯一のものではありませんが、私は変更するテキストのサイズを取得することができれば、私は私が行うために必要な変更の残りの部分はかなり確信しています簡単だろう。

答えて

1

私は[super drawTextInRect:rect]の呼び出しもCGContextSetFontSizeへの呼び出しを取り消してフォントサイズを設定すると思います。これを望むなら、おそらくスーパーの実装を呼び出す代わりに、すべて自分で描画する必要があります。

1

UILabelのdrawTextInRectメソッドは、フォントサイズやその他の設定と合わせてテキストサイズを設定し、サイズをオーバーライドします。フォントサイズを変更するには、setFont:メソッドまたはminimumFontSizeプロパティを使用してください。

私はあなたのAppKitのスーパークラスはので、この動作を無効にされてしようと、あなたはInterfaceBuilderで設定した設定にフォントや色とかを設定しようとしていることを信頼することができます
....我々は昨日、このいずれかを持っていたと思っ
+0

私はちょうどdrawTextInRectを取得しようとしていました何をするにも*。私の本当の目標は、UILabelのテキストを1ピクセルの黒い輪郭の枠線にすることです: http://stackoverflow.com/questions/1103148/how-do-i-make-uilabel-display-outlined-text –

2

全く役に立たない。あなたは何ができるのか、このような何かをしようと...機能を変更する描画機能に入るパラメータをマッサージされています

- (void)drawTextInRect:(CGRect)rect{ 

    CGFloat newWidth = rect.size.width * 0.75; // 3/4 the original width 
    CGFloat newHeight = rect.size.height * 0.812; // and a little less tall. 

    CGRect newRect = CGRectMake(rect.origin.x,rect.origin.y,newWidth,newHeight); 

    [super drawTextInRect:newRect]; // draw text into the NEW rect! 
} 

さらに、ニコライは正しいです:あなたは、フォントを変更したい場合は、その後のsetFontを呼び出し!

+0

私が今drawTextInRectについて質問しているのは、昨日の提案がベストなルートのように思えました。 私はフォントのサイズについて質問しました。私はこの例をボイルしようとしていました。フォントのサイズを変更できたら、必要なアウトラインテキストの塗りつぶしとストロークと色を変更することもできました。 あなたが上に投稿したスニペットは役立ちますが、私はdrawTextInRectをUILabelサブクラスのテキストにアウトラインを追加する方法を知っていれば、まだ近くにいます。しかし、私は本当にこれまでのヘルプに感謝! –

4
/* use CGContextSetLineWidth() and CGContextSetStrokeColorWithColor() 
to adjust your outline settings: directly preceding StrokeRect() */ 


- (void)drawTextInRect:(CGRect)rect{ 

    [super drawTextInRect:rect]; // let super do the work 

    CGContextStrokeRect(UIGraphicsGetCurrentContext(),rect); 
} 
+0

これを試してみましたが、テキスト文字の代わりにUILabel全体の輪郭線を描きました。しかし、ありがとう!真剣に、皆さんは素晴らしいです。 –

1

デリゲートメソッドではこれを実行しません。あなたはUILabelへのポインタ(IBOutlet)を取得する必要があります。

あなたはUILabelののsetTextを使用したなどUILabelのフォント、大胆さを、その後を設定することができます。方法

+0

私は質問に含まれているアップルのドキュメントの引用が私を迷わせたかもしれないと思います。 「現在のコンテキストをさらに構成することができる」と言う部分は、おそらくdrawTextInRectデリゲート内からUILabelによって表示される個々の文字に、私の1ピクセルの枠線を追加できると思っていました。それはそうではないように見えますか?私は* setTextOutlineColor *と* setTextOutlineWidth *メソッドがあることを望みます - それは素敵でしょう!!! –

+0

もう一度、単純な例としてCGContextSetFontSizeを使用していました。私は人々がdrawTextInRectから使用していたに違いないと思っていました。私はそれができたら、私は簡単にテキストのアウトラインのものを変更することができたと思った。 –

2

あなたはUILabelのフォントを設定してみてくださいすることができます

UIFont *font = [UIFont fontWithName:@"Courier" size:32]; 
[self setFont: font]; 
[super drawTextInRect:rect]; 
関連する問題