在iOS上使用Quartz2d时字体平滑/消除锯齿?
问题描述:
我有一个自定义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];
我没有关于如何解决这个字体呈现问题的线索。有任何想法吗?
答
我解决这个问题是只需添加几UILabel
编程方式与正确的坐标。这些UILabel
实例完美地呈现文本,所以这解决了我的问题。
答
如果您愿意放弃文本上的消除锯齿功能,则可以保存打开消除锯齿功能的上下文。
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);