22

我想为使用 iOS 提供的NSString (UIStringDrawing)类别方法绘制的文本添加阴影:

- (CGSize)drawAtPoint:(CGPoint)point forWidth:(CGFloat)width 
             withFont:(UIFont *)font minFontSize:(CGFloat)minFontSize 
       actualFontSize:(CGFloat *)actualFontSize 
        lineBreakMode:(UILineBreakMode)lineBreakMode
   baselineAdjustment:(UIBaselineAdjustment)baselineAdjustment; 

显然,没有投影选项。

是的,可以在这里使用 UILabel 并设置阴影属性,但这不会像 UILabel 那样高效,因为任何 UIView 子类(例如 UILabel)都包装了一个 CALayer 对象并且会更重(性能方面)。

这是上下文:

我正在为 UITableViewCell 子类进行自定义绘图,drawRect:在表格单元格视图上实现,而不是从复合 UIView 子类的 Nib 文件创建表格单元格。

组合一堆 UIView 子类会破坏试图保持这种精简并在表格视图滚动性能中保持在每秒 50-60 帧的目的。

我曾尝试以轻微的偏移量两次绘制字符串。一旦我调整了我要去的单元格的背景颜色上的阴影颜色,这可能会变得可以接受,但它看起来相当笨拙。当然,没有像 UILabel 那样的阴影模糊属性。

我搜索了解决方案,他们要么推荐 UILabel 用法(我已经在上面忽略了,因为我有大约十几个不同的文本元素被合成到表格单元格视图中)或CGContextSetShadow(). 后者似乎总是在矩形形状的上下文中被建议,并且不一定用于将阴影附加到使用上述 NSStringdrawAtPoint...方法直接绘制的文本路径上。(我确实尝试过,但它似乎没有用(即没有任何改变);我是 Core Graphics 绘图的新手)。

建议?

4

1 回答 1

40

它对我来说很好用CGContextSetShadow()。例子:

- (void)drawRect:(CGRect)rect 
{
    NSString *string = @"Hello World!";

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetShadow(context, CGSizeMake(20.0f, 20.0f), 10.0f);

    [string drawAtPoint:CGPointMake(100.0f, 100.0f) withFont:[UIFont boldSystemFontOfSize:36.0f]];
}
于 2010-12-08T14:24:15.530 回答