1
CGContextRef currentContext = UIGraphicsGetCurrentContext();

CGContextSetStrokeColorWithColor(currentContext, hh2DarkGray.CGColor);
CGFloat lengths[] = {0, 8};
CGContextSetLineCap(currentContext, kCGLineCapRound);
CGContextSetLineWidth(currentContext, 1);
CGContextSetLineDash(currentContext, 0.0f, lengths, 2);

CGContextBeginPath(currentContext);
CGContextMoveToPoint(currentContext, x1, y1);
CGContextAddLineToPoint(currentContext, x2, y2);

CGContextClosePath(currentContext);
CGContextDrawPath(currentContext, kCGPathStroke);

我在上面的代码中做错了什么,导致点的间距不均匀?它看起来像这样。

. …………………………………………………………………………………………………………………………………………………… 当我需要它看起来像这样时。. . . . . . . . . . . . . .

我完全迷路了,我能找到的所有其他帖子都没有指出这种问题。请帮忙?

4

2 回答 2

4

问题是你正在关闭路径——这隐含地画了一条线回到第一个点。如果您的路径仅由两点之间的直线组成,那么您基本上会在彼此的顶部直接绘制两条线,这会导致出现额外的点(这些是虚线图案中具有偏移的第二条线)。

解决方案:只需删除对CGContextClosePath.

{1, 8}使用而不是作为破折号模式也更合乎逻辑{0, 8},因为您希望绘制一个点,但在实践中,它似乎没有什么区别。

于 2013-05-14T16:33:38.800 回答
0

尝试添加0.5到您的线的坐标:

CGContextMoveToPoint(currentContext, x1 + 0.5, y1 + 0.5);
CGContextAddLineToPoint(currentContext, x2 + 0.5, y2 + 0.5);

您必须考虑逻辑坐标而不是像素索引。当你想绘制像素完美的线条时,你必须传递一些像素中心的坐标。否则你会得到四舍五入的工件。

于 2013-05-14T15:24:18.800 回答