这是我的代码:
CGContextSetShouldAntialias(context, NO);
CGContextSetLineWidth(context, 0.5);
CGPoint hPoints[2];
hPoints[0] = CGPointMake(10, 21.5);
hPoints[1] = CGPointMake(100, 21.5);
CGContextAddLines(context, hPoints, 2);
CGPoint vPoints[2];
vPoints[0] = CGPointMake(10, 21.5);
vPoints[1] = CGPointMake(10, 41.5);
CGContextAddLines(context, vPoints, 2);
CGContextStrokePath(context);
结果如下:
你可以看到垂直线是1px宽度但水平线是拉伸的。我已经尝试了所有可能的值Y - (20,20.5,21,21.5)每次拉伸线。
我在这里阅读了很多帖子,但没有成功,有人可以解释发生了什么,我怎么能在精确1px宽度的视网膜显示器上画水平线?
UPD: 解决了它:
UIView *line = [[UIView alloc] initWithFrame:CGRectMake(10, 20, 100, 0.5)];
[line setBackgroundColor:[UIColor greenColor]];
[self addSubview:line];
1retina px没有任何伸展!
答案 0 :(得分:1)
试试这个:
CGContextSetShouldAntialias(context, NO);
CGContextSetLineWidth(context, .5);
CGPoint hPoints[2];
hPoints[0] = CGPointMake(10, 22.0);
hPoints[1] = CGPointMake(100, 22.0);
CGContextAddLines(context, hPoints, 2);
CGPoint vPoints[2];
vPoints[0] = CGPointMake(10, 22.0);
vPoints[1] = CGPointMake(10, 42.0);
CGContextAddLines(context, vPoints, 2);
CGContextStrokePath(context);
如果你绘制一条线而一个点是一个分数,那么它将给出一条模糊的线条。希望这有助于.. :))
修改强>
以下是我想要的link。阅读积分与像素。它描述了你所面临的问题。
答案 1 :(得分:0)
这是因为你的得分是21.5分。
当你使用半个点时,它会尝试将线放在两行像素之间,为此,它会尝试在每一侧放置一半的线(这显然是不可能的),因此它绘制了一条模糊的线条而是在每一边。
只是不要使用半分而且没关系。