我想为使用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文件创建表格单元格。
合成一堆UIView子类会破坏尝试保持这种精益的目的,并在表格视图滚动性能中保持在每秒50-60帧内。
我尝试过轻微偏移两次绘制字符串。一旦我调整了我要去的单元格的背景颜色上的投影颜色,这可能会变得可以接受,但它似乎相当笨拙。当然没有像UILabel那样的阴影模糊属性。
我搜索了解决方案,他们或者推荐使用UILabel(我上面已经解雇了,因为我有十几个不同的文本元素被合成到表格单元格视图中)或CGContextSetShadow()
。后者似乎总是在矩形形状的上下文中建议,并且不一定用于将阴影附加到直接使用上面提到的NSString drawAtPoint...
方法绘制的文本的路径。 (我确实尝试过,但它似乎没有用(即没有改变);我是Core Graphics绘图的新手。)
建议?
答案 0 :(得分: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]];
}