我正在使用[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会因为添加了额外的空间而导致线条完全不同。< / p>
有没有比我正在使用的更好的方法来找到绘制(或绘制字符串)所需的纹理/矩形的大小?
答案 0 :(得分:2)
您只需要跟踪两个不同的行为。
-[NSString drawInRect:]
。请拨打此stringBounds
。shadowBounds
。使纹理大小为shadowBounds
。
绘制文字时,您需要按shadowBounds.origin - stringBounds.origin
翻译。 (或者反过来 - 它取决于你究竟做了什么,按顺序排列。当你得到它时你会知道它。)
然后执行[theString drawInRect:stringBounds ...]
。