1

私は[NSString drawInRect:]テクスチャにテキストを描画するために使用していますが、ドロップシャドウを追加するまですべてが正常に機能します。それらは正しく表示されますが、描画先の四角形によってクリップされることがよくあります。

問題は[NSString sizeWithFont:]、ドロップシャドウがを介して適用されるため、ドロップシャドウがわからないことCGContextSetShadowWithColor(...)です。

これが私が使用しているコードです(綿毛が除去されています):

CGSize dim = [theString sizeWithFont:uifont];

...

CGContextSetRGBFillColor(context, 1.0f, 1.0f, 1.0f, 1.0f);
CGContextTranslateCTM(context, 0.0f, dim.height);
CGContextScaleCTM(context, 1.0f, -1.0f);
CGContextSetShadowWithColor(context, CGSizeMake(dropOffset.x, dropOffset.y), dropBlur, dropColorRef);

...

[theString drawInRect:dim withFont:uifont lineBreakMode:UILineBreakModeWordWrap alignment:align];

dimドロップシャドウとブラーを考慮に入れて拡張しようとしましたが、ほとんどの場合は機能しますが、追加された余分なスペースのために、拡張されたrectによってラインが完全に折り返されることがあります。

私が使用しているよりも、描画する(または文字列を描画する)ために必要なテクスチャ/長方形のサイズを見つけるためのより良い方法はありますか?

4

1 に答える 1

2

2つの異なるrectを追跡する必要があります。

  1. に渡すテキストを含むrect -[NSString drawInRect:]。これを呼び出しますstringBounds
  2. シャドウを含む拡張/オフセットrect。これを呼び出しますshadowBounds

テクスチャをのサイズにしshadowBoundsます。

テキストを描くときは、で翻訳する必要がありますshadowBounds.origin - stringBounds.origin。(またはその逆-それはあなたが何をするか、どの順序で行うかによって異なります。あなたがそれを手に入れるときあなたはそれを知るでしょう。)

次に、実行します[theString drawInRect:stringBounds ...]

于 2012-04-15T18:36:43.770 に答える