iOS:CGContext Stroke Path,不断更新路径

时间:2011-10-26 06:09:13

标签: objective-c ios core-graphics cgcontext

我想构建一个在调用setPointInGraph:方法时更新的小线图。每当我调用它时,我希望图形更新为我刚刚添加的点,因此从我的最后一点开始画一条线。我在下面的代码中看到了问题,在'drawRect:'中它只是一直覆盖旧路径。

- (void)setPointInGraph:(float)p {

    self.point = p;
    [self setNeedsDisplay];
}


- (void)drawRect:(CGRect)rect {

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGFloat maxX = CGRectGetMaxX(rect);
    CGFloat maxY = CGRectGetMaxY(rect);

    CGColorRef strokeColor = [self.lineColor CGColor];
    CGContextSetStrokeColorWithColor(context, strokeColor);
    CGContextSetLineWidth(context, self.lineWidth);
    CGContextBeginPath(context);                
    CGContextMoveToPoint(context, 0.0, maxY - maxY * self.point);
    CGContextAddLineToPoint(context, maxX * (point / count), maxY - maxY * self.point);
    CGContextStrokePath(context);

    count++;

}

如何保留路径(例如属性)并在我选择时更新它?如何不断添加到此路径而不会覆盖它?

2 个答案:

答案 0 :(得分:1)

使用UIBezierPath。您可以致电addLineToPoint来添加新细分。

答案 1 :(得分:0)

不是在图形上下文中创建路径,而是创建一个规则路径,然后将其描边:

path = CGPathCreateMutable();
CGPathAddLineToPoint(path, ...);

CGContextBeginPath(context);
CGContextAddPath(path);
CGContextStrokePath(context);

当您需要更新路径时,请创建上一个路径的可变副本,并将该行添加到其中:

path = CGPathCreateMutableCopy(lastPath);
CGPathRelease(lastPath);
CGPathAddLineToPoint(path, ...);

然后再画一遍:

CGContextBeginPath(context);
CGContextAddPath(path);
CGContextStrokePath(context);