iOS: CGContextStrokePath с постоянными обновлениями пути - PullRequest
1 голос
/ 26 октября 2011

Я хочу построить небольшой линейный график, который будет обновляться при вызове моего метода 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 ]

1 голос
/ 26 октября 2011

Используйте UIBezierPath. Вы можете добавить новые сегменты, позвонив addLineToPoint.

0 голосов
/ 26 октября 2011

Вместо создания пути в графическом контексте создайте обычный путь, который вы затем обводите:

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

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

Когда вам нужно обновить путь, создайте изменяемую копию предыдущего пути и добавьте в него строку:

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

А затем нарисуйте его снова:

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