2011-03-03 107 views
1

我有一个自定义UIView,它会生成某种需要用数字标注高度的图。在iOS上使用Quartz2d时字体平滑/消除锯齿?

所有绘图都可以,当用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

我解决这个问题是只需添加几UILabel编程方式与正确的坐标。这些UILabel实例完美地呈现文本,所以这解决了我的问题。

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);