开发者

Quartz Drawing weirdly

what I'm trying to do is create a custom progress bar, with quartz drawing, what I do is the following,

- (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);
}

In the CGContextAddLineToPoint I multiply the maxX times time, which is calculated with this function every second.

- (void)pushTime {  
    if (time >= 1.0) {  
       开发者_如何学Go time = 0.0;  
    } else {  
        time = time += 0.1;
    }  
    [self setNeedsDisplay];
}

It works great the first time, but then the progress bar never gets back to the starting point, I already tried to change the start value to other than 0, so that quartz can create the path without a problem, but that didnt do it.

Anyway, thank you for your help.


It seems your view does not clear previously drawn content for some reason - you can fix that by explicitly forcing view to clear before redrawing itself:

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

    CGContextRef context = UIGraphicsGetCurrentContext();  

    CGContextClearRect(context, rect);
    ...

Although I expected that clearing should be done automatically (and tweaking the value of clearsContextBeforeDrawing property does not make any effect...)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜