石英绘图很奇怪

时间:2011-03-10 05:54:28

标签: iphone quartz-graphics drawrect

我要做的是创建一个自定义进度条,使用石英绘图,我所做的是以下内容,

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

在CGContextAddLineToPoint中,我乘以maxX倍时间,该时间是每秒使用此函数计算的。

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

它第一次工作得很好,但是进度条永远不会回到起点,我已经尝试将起始值更改为0以外,这样石英可以创建路径而没有问题,但是没有做到这一点。

无论如何,谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

由于某些原因,您的视图似乎无法清除以前绘制的内容 - 您可以通过在重绘自身之前明确强制视图清除来解决此问题:

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

    CGContextRef context = UIGraphicsGetCurrentContext();  

    CGContextClearRect(context, rect);
    ...

虽然我预计应该自动完成清算(并且调整clearsContextBeforeDrawing属性的值不会产生任何影响......)