CoreGraphics - 如何在平面上一个一个地绘制矩形?

Posted

技术标签:

【中文标题】CoreGraphics - 如何在平面上一个一个地绘制矩形?【英文标题】:CoreGraphics - How do I draw rects one by one on a plane? 【发布时间】:2012-11-22 11:47:46 【问题描述】:

我有一种进度条,它实际上是一本书所读内容的可视化表示。该条是一条水平线,在阅读书籍的区域填充。例如,如果它是一本 100 页的书,并且用户只阅读了第 1 页到第 10 页和第 90 页到第 100 页,进度条将显示最左边的 10% 区域和最右边的 10% 区域填充颜色.

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

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

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

如何使用“for”循环来绘制多个矩形?

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

以上是关于CoreGraphics - 如何在平面上一个一个地绘制矩形?的主要内容,如果未能解决你的问题,请参考以下文章

使用 CoreGraphics 在 iPhone 上绘制简单的线条

CoreGraphics 在大 UIImage 上绘图

在 Swift 中使用 CoreGraphics 在屏幕上绘制像素

如何使用quartz2d/coregraphics绘制圆角三角形

如何移动 3D 盒子以保持在旋转平面上?

python如何绘制一个三维空间下的平面?