UIBezierPath中的厚度不均匀

时间:2015-09-12 11:25:22

标签: ios objective-c uibezierpath

我正在尝试使用UIBezierPath。我想制作一个网格视图。

NSInteger yAxisIncremental = 0;
NSInteger xAxisIncremental = 0;

UIBezierPath *path = [UIBezierPath bezierPath];
path.lineWidth = 1;

for (int x = 0; x <5; x++) {
    [path moveToPoint:CGPointMake(xAxisIncremental, 0)];
    [path addLineToPoint:CGPointMake(xAxisIncremental, self.frame.size.height)];
    xAxisIncremental = xAxisIncremental + kWidthOfSquare;
}

for (int x = 0; x <=5; x++) {
    [path moveToPoint:CGPointMake(0, yAxisIncremental)];
    [path addLineToPoint:CGPointMake(self.frame.size.width, yAxisIncremental)];
    yAxisIncremental = yAxisIncremental + kHeightOfSquare;
}

[[UIColor blackColor] setStroke];
[path stroke];

enter image description here

注意第一行很薄,相应的行有点粗。我在代码中做错了什么或者是预期的行为?

2 个答案:

答案 0 :(得分:0)

您要绘制的第一行从0开始。这意味着该行宽度的一半可能在屏幕外或视图之外。你可以从像素0.5而不是0开始解决这个问题。

此外,如果您选择线宽为1.0,这意味着在高dpi设备上,线条将比屏幕上的1个实际像素厚。要绘制宽度为1px的行,您可以使用UWezierPath文档中所述的lineWidth 0:

  

宽度为0被解释为可以在特定设备上呈现的最细线。

答案 1 :(得分:0)

以下是一些示例代码,用于生成带有笔划安全区域的矩形点。

objective-c

  UIBezierPath *aPath = [UIBezierPath bezierPath];
    CGFloat safeArea  = 1.5;
    CGFloat minX = rect.origin.x+safeArea;
    CGFloat minY = rect.origin.y+safeArea;
    CGFloat maxX = rect.origin.x+rect.size.width-safeArea;
    CGFloat maxY = rect.origin.y+rect.size.height-safeArea;
    //draw your rectangle with stroke safe area*2
...