我有一个自定义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];
我没有解决如何解决此字体渲染问题的线索。有什么想法吗?
答案 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
实例完美地呈现了文本,因此解决了我的问题。