当我们绘制1px的线时,由于iOS抗锯齿的原因,有时线会变浅,并且变宽。
原因是如果线刚好落在了一列或者一行显示显示单元之内,那么就会渲染出标准的一个像素的黑线。
但如果线落在了两个行或列的中间时,那么会得到一条“失真”的线,其实是两个像素宽的灰线。
例如常常绘制的1px的线。
//第一条线
UIView *lineOne = [[UIView alloc] initWithFrame:CGRectMake(60 , 300 , 10, SINGLE_LINE_WIDTH)];
[self addSubview: lineOne];
lineOne.backgroundColor = [UIColor blackColor];
- (void)drawRect:(CGRect)rect{
//第三条线
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextBeginPath(context);
CGContextMoveToPoint(context, 70 , 300);
CGContextAddLineToPoint(context, 80 , 300);
CGContextSetLineWidth(context, SINGLE_LINE_WIDTH);
CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
CGContextStrokePath(context);
//第四条线
// 第一种方法: 关闭图形上下文的抗锯齿
// CGContextSetShouldAntialias(context, NO);
//第二种方法: 添加偏移量
CGContextMoveToPoint(context, 80 , 300 + SINGLE_LINE_ADJUST_OFFSET);
CGContextAddLineToPoint(context, 90 , 300 + SINGLE_LINE_ADJUST_OFFSET);
CGContextSetLineWidth(context, SINGLE_LINE_WIDTH);
CGContextSetStrokeColorWithColor(context, [UIColor greenColor].CGColor);
CGContextStrokePath(context);
}
显示如下:
只有绘制奇数像素宽度的线时需要处理,偶数加偏移也会出现问题。
解决方法如下
1.关掉抗锯齿
2.设置偏移量