之前在美术验收界面的时候, 提出了一个问题:
Q: 为什么要求1像素宽的一个矩形框似乎却变成了2,3个像素宽。仔细检查过代码后发现,的确设置了LineWidth为1,但绘制效果却并不如人愿。似乎在ios上绘制最低要2个像素的线宽。
W: 原因是因为默认情况下,锯齿显示,所以它显示为宽度 = 2.0
这是 Quartz的抗锯齿机制. 有一种简单粗暴的解决办法就是关闭消除抗锯齿. 即:
CGContextSetShouldAntialias(context, NO );
但是显而易见的问题是取消抗锯齿会导致绘制效果变差。
而另外一种方案则比较取巧:将绘制调整到半像素坐标系上:
总结 :
所谓的线宽指的是给定路径的中心到两边的粗细,换句话是在路径的两边各绘制一半 .
//将
CGContextMoveToPoint(context, 100.0, 100.0);
CGContextAddLineToPoint(context, 100.0, 200.0);
//改为
CGContextMoveToPoint(context, 100.5, 100.5);
CGContextAddLineToPoint(context,100.5, 200.5);