路径没有填充颜色

时间:2014-02-04 10:43:08

标签: ios uibezierpath

我想画一个酒吧。我设置了笔触颜色和填充颜色。虽然我使用填充颜色设置路径,但它没有被填充。此代码绘制一个矩形。

 blocks = yValue / yInterval; //Total number of blocks
    divider = (self.bounds.size.height * 0.75 - 100)/ blocks ;//height for each block

    float factor = value / yValue;
        //NSLog(@"%f",factor);
        int size = 40;
        [[UIColor redColor] setFill];
        [[UIColor redColor] setStroke];
        UIBezierPath *path = [[UIBezierPath alloc]init];

        CGPoint x1 = CGPointMake(0 + 100 + (index * size), self.bounds.size.height * 0.75);
        CGPoint x2 = CGPointMake(x1.x + size,self.bounds.size.height * 0.75 );
       // float height = (self.bounds.size.height * 0.75) - ((self.bounds.size.height * 0.75) * factor) + 5;
        float height = self.bounds.size.height * 0.75 - (divider * factor * blocks);
        CGPoint y1 = CGPointMake(x1.x, height);
        CGPoint y2 = CGPointMake(x2.x, height);

        [path moveToPoint:x1];
        [path addLineToPoint:x2];
        [path moveToPoint:x2];
        [path addLineToPoint:y2];
        [path moveToPoint:y2];
        [path addLineToPoint:y1];
        [path moveToPoint:y1];
        [path addLineToPoint:x1];

        [path closePath];
        [path fill];
        [path stroke];`

1 个答案:

答案 0 :(得分:3)

这是因为您没有正确地绘制封闭路径。你只是画了4行。

试试这个......

// all your setup code...

[path moveToPoint:x1];
[path addLineToPoint:x2];
[path addLineToPoint:y2];
[path addLineToPoint:y1];
[path addLineToPoint:x1];

[path closePath];
[path fill];
[path stroke];

这应该有用。

稍作解释

从文档closePath方法...

通过在当前子路径的第一个和最后一个点之间创建一个线段来关闭当前子路径。

moveToPoint将在当前路径中启动一个新的子路径。

因此使用......

Move to P1.     Path = 0.
Add line to P2. Path = P1-P2.
Add line to P3. Path = P1-P2-P3.
Close path.     Path = P1-P2-P3(-P1).

你在做什么......

Move to P1.     Path = 0.
Add line to P2. Path = P1-P2.
Move to P2.     Path = P1-P2.
Add line to P3. Path = P1-P2 | P2-P3.
Move to P3.     Path = P1-P2 | P2-P3.
Add line to P1. Path = P1-P2 | P2-P3 | P3-P1.
Close path.     Path = P1-P2 | P2-P3 | P3-P1(-P3).

您关闭的所有内容都是最后一行子路径。移动到某个点将在路径中启动一个新的子路径。