在iOS上使用Quartz2d时字体平滑/消除锯齿?

时间:2011-03-03 18:17:35

标签: ios uikit quartz-graphics

我有一个自定义UIView,它生成某种需要用数字表示的高度的图表。

所有绘图都没问题,在使用quartz2d创建圆等时正确地进行抗锯齿处理。
但是,当我想在上下文中绘制NSString时,字体平滑/消除锯齿会搞砸。
禁用消除锯齿确实会导致文本更薄,因此交换机确实有效,但是,消除锯齿的文本很糟糕。它看起来并不像iOS中呈现的普通文本一样清晰。

CGContextSetAllowsAntialiasing(context, YES);
CGContextSetShouldAntialias(context, YES); 
CGContextSetShouldSmoothFonts(context, YES);
NSString *stringValue = [NSString stringWithFormat:@"%d", input.height];
UIFont *font = [UIFont  systemFontOfSize:textsize]; 

[stringValue drawAtPoint:CGPointMake(x, y) withFont:font];

我没有解决如何解决此字体渲染问题的线索。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

如果您愿意放弃对文本的消除锯齿,可以在打开抗锯齿的情况下保存上下文。

GCContextSaveGState(context);

关闭消除锯齿并渲染文字:

GCContextSetShouldAntialias(context, NO);
NSString *stringValue = [NSString stringWithFormat:@"%d", input.height];
UIFont *font = [UIFont systemFontOfSize:textSize];

[stringValue drawAtPoint:CGPointMake(x, y) withFont:font];

然后将图形上下文恢复到之前的空间。 (打开抗锯齿功能)渲染图形的其余部分。

CGContextRestoreGState(context);

答案 1 :(得分:2)

我对此问题的解决方案是只使用正确的坐标以编程方式添加多个UILabel。这些UILabel实例完美地呈现了文本,因此解决了我的问题。