CoreGraphics - 如何在飞机上逐个绘制rects?

时间:2012-11-22 11:47:46

标签: iphone ios cocoa-touch core-graphics

我有一种进度条,实际上是书籍阅读内容的直观表示。这个栏是一条水平线,在阅读本书的区域填满。例如,如果它是一个100页的书,并且用户只读过第1页到第10页和第90页到第100页,则进度条将显示最左边的10%区域和最右边的10%区域填充颜色

我目前正在使用此代码为一个阅读会话绘制rect:

CGContextRef context = UIGraphicsGetCurrentContext();
CGRect innerRect = CGRectInset(rect, 5, 5);
CGRect ProgressIndicator = CGRectMake(innerRect.origin.x, innerRect.origin.y, 20, innerRect.size.height);
CGContextSetStrokeColorWithColor(context, [[UIColor blueColor] CGColor]);
CGContextSetLineWidth(context, 5);
CGContextMoveToPoint(context, CGRectGetMinX(ProgressIndicator), CGRectGetMinY(ProgressIndicator));
CGContextAddLineToPoint(context, CGRectGetMaxX(ProgressIndicator), CGRectGetMinY(ProgressIndicator));
CGContextAddLineToPoint(context, CGRectGetMaxX(ProgressIndicator), CGRectGetMaxY(ProgressIndicator));
CGContextAddLineToPoint(context, CGRectGetMinX(ProgressIndicator), CGRectGetMaxY(ProgressIndicator));
CGContextClosePath(context);
CGContextStrokePath(context);
CGContextSetFillColorWithColor(context, [[UIColor blueColor]CGColor]);
CGContextFillRect(context, ProgressIndicator);

现在,这仅适用于一个阅读会话,并且只绘制一个矩形作为条形图上的矩形“读取”部分。如果我有多个rects(比如在数组中)在条形图上绘制,我该如何管理绘图。一旦我画了另一个矩形,我恐怕会丢失当前的绘图。

如何使用“for”循环绘制多个rects?

我知道这可能是一个非常愚蠢的问题,但我试图找到解决办法,但没有成功。

1 个答案:

答案 0 :(得分:0)

我建议以不同的方式思考这个问题;跟踪任意数量的“阅读会话”可能是非常低效的表示。

在这种情况下,而不是每次从“阅读会话”连接数据时,我会建议稀疏表示可能使您的绘图更容易 - 只需跟踪已读取的页面,句点,数组或字典或自定义对象。

然后,您的绘图代码可以简单地循环存储并绘制一个颜色的部分用于“读取”而不是绘制,或绘制另一种颜色等,用于“未读”。