7

我正在尝试画一条简单的线,问题是它的宽度不是 1 个像素,而是 2 个。文档指出,如果我正确阅读,用户空间单位将转换为一个像素。

代码很简单,但我的行总是 2 像素宽。

//Get the CGContext from this view
CGContextRef context = UIGraphicsGetCurrentContext();
//Set the stroke (pen) color
CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);

//Set the width of the pen mark
CGContextSetLineWidth(context, 1);

for (int i = 1; i <= sections - 1; i++)
{
    UIBezierPath *path = [UIBezierPath bezierPath];
    [path moveToPoint:CGPointMake(0.0, i * kSectionHeight)];

    CGContextMoveToPoint(context, 0.0, i * kSectionHeight); //Start point
    CGContextAddLineToPoint(context, self.frame.size.width, i * kSectionHeight);
}

CGContextStrokePath(context);

在此处输入图像描述

4

2 回答 2

3

没有点不能转化为像素。如果您的线太粗,请更改该值。

于 2013-08-27T00:16:38.147 回答
0

我在测试应用程序中尝试了以下内容:

CGFloat desiredWidthInPixels = 1.0f;
CGFloat lineWidth = desiredWidthInPixels / [[UIScreen mainScreen] scale];
NSLog(@"lineWidth = %f", lineWidth);

我得到了 0.5f 的 lineWidth,它应该准确地转换为屏幕上的单个像素宽度(因为比例为 2.0,表示“Retina”设备)。这应该在不同屏幕尺寸的设备上正确适应。

***警告:当然,这仅适用于[[UIScreen mainScreen] scale]当前运行的情况。

于 2013-08-27T02:25:54.203 回答