在不使用UILabel的情况下,将draw阴影添加到drawRect:方法中的NSString文本中

我想给使用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并设置投影属性,但这不会是性能的,因为任何UIView子类(如UILabel)包装了一个CALayer对象,并且会变得更重(性能明智)。

这是上下文:

我正在做一个UITableViewCell子类的自定义绘图,在表格单元格视图中实现drawRect:而不是从复合UIView子类的Nib文件中创build表格单元格。

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

我已经尝试了两次略微偏移的string。 一旦我调整了我已经去过的单元格的背景颜色上的阴影颜色,这可能是可以接受的,但它似乎相当kludgey。 当然,没有像UILabel获得的投影模糊属性。

我search了解决scheme,他们推荐使用UILabel(我已经解决了上述问题,因为我有大约十几个不同的文本元素被合成到表单元格视图)或CGContextSetShadow() 。 后者似乎总是build议在矩形形状的上下文中,而不一定要将阴影附加到上面提到的NSString drawAtPoint...方法直接绘制的文本path上。 (我尝试过,但似乎没有工作(即没有改变);我是新的核心graphics绘图)。

build议?

它适用于我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]]; }