设置1px线的两种方法

当我们绘制1px的线时,由于iOS抗锯齿的原因,有时线会变浅,并且变宽。
原因是如果线刚好落在了一列或者一行显示显示单元之内,那么就会渲染出标准的一个像素的黑线。
但如果线落在了两个行或列的中间时,那么会得到一条“失真”的线,其实是两个像素宽的灰线。


设置1px线的两种方法_第1张图片
image.png

例如常常绘制的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);
}

显示如下:


image.png

只有绘制奇数像素宽度的线时需要处理,偶数加偏移也会出现问题。
解决方法如下
1.关掉抗锯齿
2.设置偏移量

你可能感兴趣的:(设置1px线的两种方法)