2009-12-20 28 views
2

我已经覆盖了我的UIView中的drawRect:,我想绘制几个图块。我遍历它们,我有一个单独的函数绘制每个单独的图块。覆盖drawRect:并将新的偏移CGContexts推入堆栈

我现在做的方式是我通过瓷砖的计算CGRect的功能。目前,绘制瓦片图像时,任何绘图方法都必须包括传递给它的矩形的x偏移量和x& y偏移量。

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

因此,例如,我可以在[0, 0, 50, 50]瓷砖画法里面画一个正方形,并实际上将在正确的瓷砖的位置如何界定呢?

+0

“推入堆栈”是什么意思? – kiamlaluno 2009-12-20 23:03:06

回答

9

你应该利用CTM的(当前变换矩阵),这使得使用仿射变换来比例图入上下文。它的目的就是为了这个目的。

  • 首先调用CGContextSaveGState。这将一堆有关图形上下文的信息保存到(每个上下文)堆栈中,包括CTM。
  • 其次,使用CGContextTranslateCTM。传入矩形原点的y坐标。
  • 然后调用你的绘图子程序。
  • 最后,调用CGContextRestoreGState。这将撤销翻译。

希望有所帮助。

+0

完美,那就是我一直在寻找的!知道它会与堆栈有关;-) – 2009-12-21 00:38:17

+1

一个可能的改进:你不必在每个瓦片周围保存和恢复gstate。您可以在整行之前使用'CGContextSaveGState',对每个图块水平(并且垂直为零)瓦片宽度平移点转换,然后'CGContextRestoreGState'返回到行的开始位置并向下平移瓦片高度指向下一行。 – 2009-12-21 01:21:06

+0

好戏。 CoreGraphics就是这样一个坏蛋框架。 – 2011-11-07 01:59:03