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以考虑阴影和模糊,这主要是可行的,但有时扩展的矩形会导致线条被完全不同的包裹,因为添加了额外的空间。

有没有比我使用的更好的方法来找到绘制(或绘制字符串)所需的纹理/矩形的大小?

4

1 回答 1

2

您只需要跟踪两个不同的矩形。

  1. 将包含您传递给的文本的矩形-[NSString drawInRect:]。打电话给这个stringBounds
  2. 包含阴影的扩展/偏移矩形。打电话给这个shadowBounds

使您的纹理大小为shadowBounds.

绘制文本时,您需要翻译shadowBounds.origin - stringBounds.origin. (或者可能反过来——这完全取决于你做什么,按什么顺序。当你得到它时你会知道的。)

然后做[theString drawInRect:stringBounds ...]

于 2012-04-15T18:36:43.770 回答