我有一个自定义UIView
这是使用 -[drawRect:]
绘制的方法。
问题是抗锯齿效果非常奇怪,因为水平或垂直的黑线画得非常模糊。
如果我使用 CGContextSetAllowsAntialiasing
禁用抗锯齿功能,一切都按预期绘制。
抗锯齿:
alt text http://dustlab.com/stuff/antialias.png
无抗锯齿(看起来像 AA 的预期结果):
alt text http://dustlab.com/stuff/no_antialias.png
线宽恰好为1,所有坐标均为整数值。
如果我使用 CGContextStrokeRect
绘制矩形,也会发生同样的情况,但如果我画出完全相同的 CGRect
则不会与 UIRectStroke
.
最佳答案
由于笔画向两侧扩展的量相等,因此一个像素宽度的线不得放置在整数坐标上,而是以 0.5 像素的偏移量放置。
计算描边线的正确坐标,如下所示:
CGPoint pos = CGPointMake(floorf(pos.x) + 0.5f, floorf(pos.y) + 0.5f);
顺便说一句:不要将您的值转换为 int 并返回 float 以消除小数部分。 C 中有一个用于此目的的函数,名为 floor
。
关于iphone - 自定义 View 中奇怪的抗锯齿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1454509/