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)所需的纹理/矩形的大小比我使用?
你只需要跟踪两个不同的反应。
- 将包含您传递给
-[NSString drawInRect:]
的文本的矩形。 调用这个stringBounds
。 - 包含阴影的展开/偏移矩形。 调用这个
shadowBounds
。
使您的纹理的大小shadowBounds
。
当你绘制文本,你需要通过shadowBounds.origin - stringBounds.origin
来翻译。 (或者也可能是相反的 – 这取决于你做什么,以什么顺序,当你得到它的时候你会知道的)。
然后执行[theString drawInRect:stringBounds ...]
。
- 在PDF上添加注释
- 画一个圆圈,用不同的颜色填充不同的部分
- 在iOS开发中,如果使用Core Graphics和/或Quartz 2D,我怎样才能绘制出一个渐变的圆形,使其看起来像一个球体?
- 使用Core Graphics在Objective-C(IOS)中绘制angular度/angular度/“圆锥形”/“弧光”渐变
- drawRect和CGGraphicsContext如何工作?
- iOS在形状的中心绘制文本
- 在iOS中使用核心graphics绘制外梯半圈的梯度?
- iOS:完整的360度旋转使用块,而不是CABasicAnimation
- 在iOS上,从上下文创build一个图层并获取图层的上下文之后,这些上下文又是如何相互关联的?