覆盖drawRect:并将新的偏移CGContexts推入堆栈

时间:2009-12-20 22:18:29

标签: iphone objective-c cocoa-touch core-graphics

我已覆盖drawRect:中的UIView,我想绘制几个图块。我正在循环遍历所有这些并且我有一个单独的函数来绘制每个单独的图块。

我现在正在这样做的方法是将tile的计算CGRect传递给函数。目前,任何绘图方法都必须包括x&绘制平铺图像时,矩形的偏移量传递给它。

如何在调用tile绘制方法之前在堆栈上推送新的偏移CGContext?

例如,我可以在平铺绘图方法中的[0, 0, 50, 50]处绘制一个正方形,并且实际上是在正确的平铺位置绘制的?

1 个答案:

答案 0 :(得分:9)

您应该利用CTM(当前变换矩阵),它利用仿射变换将绘图缩放到上下文中。它就是为了这个目的而建造的。

  • 首先调用CGContextSaveGState。这将有关图形上下文的大量信息保存到(每个上下文)堆栈中,包括CTM。
  • 其次,使用CGContextTranslateCTM。通过x& y矩形原点的坐标。
  • 然后调用您的绘图子程序。
  • 最后,调用CGContextRestoreGState。这将取消翻译。

希望有所帮助。