如何屏蔽重叠的UIBezierPaths的部分

时间:2014-04-18 20:24:44

标签: ios uibezierpath

我正在绘制一个图表,其中每个图形点都有一个点:

enter image description here

要绘制图形线我正在使用UIBezierPath:moveToPoint:并绘制点我使用UIBezierPath在每个点绘制两个圆:makeCircleAtLocation:。

如何删除通过每个点的图形线?这个点只是内部的纯白色?

TIA

代码:

- (void) addDotAtLocation:(CGPoint)location radius:(CGFloat)radius withInnerColor: (UIColor*) innerColor andOuterColor: (UIColor*) outerColor
{
    [outerColor setFill];
    UIBezierPath *circle = [self makeCircleAtLocation:location  radius:5.0f];
    [circle fill];
    [innerColor setFill];
    circle = [self makeCircleAtLocation:location  radius:4.0f];
    [circle fill];
}


- (UIBezierPath *) makeCircleAtLocation:(CGPoint)location radius:(CGFloat)radius
{
    UIBezierPath *path = [UIBezierPath bezierPath];
    [path addArcWithCenter:location
                    radius:radius
                startAngle:0.0
                  endAngle:M_PI * 2.0
                 clockwise:YES];

     return path;
}



UIBezierPath *barGraph = [UIBezierPath bezierPath];    
CGPoint plotPoint = ...
[barGraph moveToPoint:plotPoint];

for (int ii = 1; ii < [self.testData count]; ++ii)
{
    dataPoint = self.testData[ii];
    x = [self convertTimeToXPoint:dataPoint.time];
    y = [self convertDataToYPoint:dataPoint.dataUsage];
    plotPoint = CGPointMake(x, y);
    [barGraph addLineToPoint:plotPoint];
    [self addDotAtLocation:plotPoint radius:5.0 withInnerColor:[UIColor whiteColor] andOuterColor:[UIColor blackColor]];
}

2 个答案:

答案 0 :(得分:4)

尝试区分构建 bezier路径(它只是路径)和绘制路径(抚摸和/或填充)。 绘制的顺序是“分层”顺序。所以你想要描绘你的图形线 - 所有你的图形线 - 首先,然后你只想描边并填充你的圆。

这不是你现在正在做的事情。你首先构建图形bezier路径,但是你抚摸和填充你的圈子,然后只有然后你划过图形路径当然它最终“在前面”。

所以,这是你的代码(为了清晰起见而浓缩):

UIBezierPath *barGraph = [UIBezierPath bezierPath];    
[barGraph moveToPoint:plotPoint]; // this does NOT draw
for (int ii = 1; ii < [self.testData count]; ++ii)
{
    // ...
    [barGraph addLineToPoint:plotPoint]; // this does NOT draw
    [self addDotAtLocation:...]]; // THIS DRAWS!
}
// and you see we still have not drawn any of the graph lines yet

因此,你显然正在按照你想要的顺序画画。

答案 1 :(得分:0)

[circle fill];

圈出你的路径名称