drawAtPoint:和drawInRect:模糊文本

时间:2009-03-19 02:50:34

标签: iphone cocoa-touch fonts font-size

使用drawAtPoint:,drawInRect:绘制字符串时,甚至设置UILabels的文本属性 - 文本有时会显得有些模糊。

我倾向于在大多数地方使用Helvetica,我注意到特定的字体大小会在模拟器和设备上造成某种程度的模糊。

例如:

UIFont *labelFont = [UIFont fontWithName:@"Helvetica-Bold" size:12];

会导致生成的标签文字略显模糊。

UIFont *labelFont = [UIFont fontWithName:@"Helvetica-Bold" size:13];

结果清晰。

我的问题是为什么会发生这种情况?这只是为字体选择最佳字体大小的问题吗?如果是这样,最佳字体大小是什么?

更新:似乎可能不是导致模糊的字体大小。可能是rect的中心是一个分数点。以下是我在Apple开发论坛上发现的评论:

  

检查位置。它很可能在   分数像素。改变中心   整数值。

我舍入了所有积分的值,但仍然存在文字仍然模糊的地方。有没有人遇到过这个问题?

6 个答案:

答案 0 :(得分:9)

我已经解决了这个问题。

确保在小数像素上不会出现您正在绘制的点或矩形。

即。 NSLog(@"%@", NSStringFromCGRect(theRect))确定在小数像素上绘制哪个点。然后在该点上致电round()

答案 1 :(得分:3)

您可能希望查看NSIntegralRect(),它可以执行您想要的操作。

答案 2 :(得分:2)

请原谅我的无知,如果这是不正确的,我对iPhone或Cocoa一无所知。

如果您要求文本在rect中居中,您可能还需要确保rect的宽度和/或高度为偶数。

答案 3 :(得分:2)

我也遇到过这个问题,但我的解决方案有所不同,可能有所帮助。 通过UIView更改TouchesBegan对象的大小后,我的问题是文字模糊 和CGAffineTransformMakeScale,然后返回CGAffineTransformIdentity中的TouchesEnded

我尝试了不同的文字大小和x和y中心点的舍入,但都没有奏效。 我的问题的解决方案是使用偶数大小来表示UIView !!

的宽度和高度

希望这会有所帮助......

答案 4 :(得分:0)

根据我的实验,某些字体在某些尺寸下无法清晰呈现。例如Helvetica-Bold不呈现“。”好吧在16.0f,但他们在18.0f清楚。 (如果你仔细观察,“。”的顶部像素是模糊的。)

在我注意到这一点之后,每次看到UIView时都会感到烦恼,因为它是动态呈现的。

答案 5 :(得分:0)

就我而言,我在自定义 <a-entity id="scenePivot" recenter="target: #frontObject"> <a-entity id="frontObject" data-description="When resetting, this object will be checked to see if user is facing it or not to confirm the reset." </a-entity> <a-camera></a-camera> 上绘制文字,结果非常模糊。我通过将CALayer设置为适当的值来解决它:

目标-C:

contentScale

夫特:

layer.contentsScale = [UIScreen mainScreen].scale;