Кварцевый рисунок странно - PullRequest
1 голос
/ 10 марта 2011

я пытаюсь создать пользовательский индикатор выполнения с кварцевым рисунком. Я делаю следующее:

- (void)drawRect:(CGRect)rect {  
    // Drawing code.  
    CGContextRef context = UIGraphicsGetCurrentContext();  
    CGRect currentBounds = self.bounds;  
    CGContextSetLineWidth(context, 20.0f);  
    CGContextSetStrokeColorWithColor(context, [ProgressBarView redColor]);

    CGContextBeginPath(context);
    CGContextMoveToPoint(context, CGRectGetMinX(currentBounds), CGRectGetMidY(currentBounds));
    CGContextAddLineToPoint(context, CGRectGetMaxX(currentBounds) * time, CGRectGetMidY(currentBounds));
    CGContextClosePath(context);
    CGContextDrawPath(context, kCGPathStroke);
}

.с этой функцией каждую секунду.

- (void)pushTime {  
    if (time >= 1.0) {  
        time = 0.0;  
    } else {  
        time = time += 0.1;
    }  
    [self setNeedsDisplay];
}

Он отлично работает в первый раз, но затем индикатор выполнения никогда не возвращается к начальной точке, я уже пытался изменить начальное значение на значение, отличное от 0, так чтоКварц может создать путь без проблем, но он этого не сделал.

В любом случае, спасибо за вашу помощь.

1 Ответ

1 голос
/ 11 марта 2011

Похоже, ваше представление по какой-то причине не очищает ранее нарисованное содержимое - вы можете исправить это, явно принудив очистить представление перед перерисовкой:

- (void)drawRect:(CGRect)rect {  
    // Drawing code.  

    CGContextRef context = UIGraphicsGetCurrentContext();  

    CGContextClearRect(context, rect);
    ...

Хотя я ожидал, что очистка должна выполняться автоматически (и изменение значения свойства clearsContextBeforeDrawing не оказывает никакого влияния ...)

...