Iphone 重写drawRect:并将新的偏移量上下文推送到堆栈上

Iphone 重写drawRect:并将新的偏移量上下文推送到堆栈上,iphone,objective-c,cocoa-touch,core-graphics,Iphone,Objective C,Cocoa Touch,Core Graphics,我已经在我的ui视图中覆盖了drawRect:,我想画几个平铺。我循环遍历了它们,我有一个单独的函数来绘制每个瓷砖 我现在的做法是将瓷砖的计算值CGRect传递给函数。目前,任何绘制方法都必须包括绘制平铺图像时传递给它的矩形的x&y偏移 在调用平铺绘制方法之前,如何在堆栈上推送新的偏移量CGContext 例如,我可以在平铺绘制方法中的[0,0,50,50]处绘制一个正方形,它将实际绘制在正确的平铺位置?您应该利用CTM(当前变换矩阵),它利用仿射变换将图形缩放到上下文中。它就是为了这个目的而建

我已经在我的
ui视图中覆盖了
drawRect:
,我想画几个平铺。我循环遍历了它们,我有一个单独的函数来绘制每个瓷砖

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

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


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

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

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

希望能有帮助。

你说的“推上堆栈”是什么意思?太好了,这正是我想要的!知道这与堆栈有关;-)一个可能的改进:您不必保存和恢复每个磁贴周围的gstate。您可以在整行之前
CGContextSaveGState
,水平平移每个磁贴的磁贴宽度点(垂直为零),然后
CGContextRestoreGState
返回到行的开头,并向下平移磁贴高度点以到达下一行。