Quartz2D在绘制之前是否逐行测试交点

时间:2010-04-02 15:46:29

标签: iphone objective-c core-graphics quartz-2d

我正在绘制一个由很多行组成的大计划。我是在drawRect:的{​​{1}}方法中完成的。该方案比视图层大,我检查每一行,只有当它与可见的rect相交时才绘制它。但有一刻我想,我应该这样做吗?也许Quartz已经在做这个测试了吗?

所以问题是: 当我使用函数UIView时,CGContextAddLineToPoint()是否测试此行与图层矩形的交集,或者它只是绘制它?

1 个答案:

答案 0 :(得分:0)

  

当我使用函数CGContextAddLineToPoint()时,核心图形是否测试此行与图层矩形的交集,或者它只是绘制它?

不,它不会抑制lineto,因为这只是子路径中的一个段。即使其中一个线段没有,子路径也可能与矩形相交。您可能每个子路径只绘制一行,但Quartz不会知道这一点,直到您moveto为新的子路径。

至于是否应该测试直线的交叉线,the documentation说:

  

实现drawRect:方法的视图应始终检查传递给方法的矩形,并使用它来限制其绘制操作的范围。由于绘图是一项相对昂贵的操作,因此以这种方式限制绘图是提高性能的好方法。

我认为我们可以合理地解释这意味着你确实应该检查这些线是否与矩形相交并跳过那些没有的线。