NSString drawInRect:并在iOS上放置阴影

我正在使用[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 ,把阴影和模糊考虑在内,这主要是工作,但有时扩展矩形导致线被完全不同,由于额外的空间被添加。

有没有更好的方法来find绘制(或绘制string)所需的纹理/矩形的大小比我使用?

你只需要跟踪两个不同的反应。

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

使您的纹理的大小shadowBounds

当你绘制文本,你需要通过shadowBounds.origin - stringBounds.origin来翻译。 (或者也可能是相反的 – 这取决于你做什么,以什么顺序,当你得到它的时候你会知道的)。

然后执行[theString drawInRect:stringBounds ...]