我想构建一个在调用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++;
}
如何保留路径(例如属性)并在我选择时更新它?如何不断添加到此路径而不会覆盖它?
答案 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);