路径未填充颜色

Aru*_*nan 0 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];`
Run Code Online (Sandbox Code Playgroud)

Fog*_*ter 6

这是因为您没有正确绘制闭合路径。你只是画了 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];
Run Code Online (Sandbox Code Playgroud)

这应该有效。

一点解释

从文档中的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).
Run Code Online (Sandbox Code Playgroud)

你在做什么是...

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).
Run Code Online (Sandbox Code Playgroud)

您关闭的只是最后一行子路径。移动到一个点将在路径中开始一个新的子路径。