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

Mic*_*all 2 iphone cocoa-touch core-graphics objective-c

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

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

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

例如,我可以[0, 0, 50, 50]在瓷砖绘图方法内部绘制一个正方形,并且实际上是在正确的瓷砖位置绘制的?

Col*_*ett 9

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

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

希望有所帮助.