2009-12-20 60 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