2009-12-20 5 views
2

drawRect:을 내 UIView에 오버라이드했습니다. 여러 타일을 그려야합니다. 나는 그들 모두를 반복하고 있으며 각각의 개별 타일을 그리는 별도의 기능을 가지고 있습니다.drawRect : 재정의하고 새로운 오프셋 CGContexts를 스택에 푸시

내가 지금하고있는 방식은 타일의 계산을 CGRect에 전달하는 것입니다. 현재, 모든 그리기 방법은 타일 이미지를 그릴 때 전달 된 rect의 x & y 오프셋을 포함해야합니다.

어떻게 타일 그리기 방법을 호출하기 전에 스택에 새 오프셋 CGContext를 푸시 할 수 있습니까?

예를 들어 타일 그리기 방법 내에서 [0, 0, 50, 50]에 사각형을 그릴 수 있으며 실제로 올바른 타일의 위치에 그려지는 것입니까?

+0

"푸시 스택"이란 무엇을 의미합니까? – kiamlaluno

답변

9

아핀 변환을 사용하여 상황에 맞게 그림을 그리는 CTM (현재 변환 행렬)을 활용해야합니다. 이 목적을 위해 제작되었습니다.

  • 첫 번째 CGContextSaveGState를 호출합니다. 이렇게하면 그래픽 컨텍스트에 대한 많은 정보가 CTM을 포함하여 (컨텍스트 당) 스택에 저장됩니다.
  • 둘째, CGContextTranslateCTM을 사용하십시오. rect의 원점 x 좌표 &을 전달하십시오.
  • 그런 다음 드로잉 서브 루틴을 호출하십시오.
  • 마지막으로 CGContextRestoreGState를 호출하십시오. 이렇게하면 번역이 취소됩니다.

희망이 있습니다.

+0

완벽 했어, 그게 내가 찾고 있던거야! 스택과 관련이 있다는 것을 알았습니다 .-) –

+1

하나의 가능한 개선 사항 : 모든 타일 주위에 gstate를 저장하고 복원 할 필요가 없습니다. 전체 행 앞에'CGContextSaveGState'를 쓰면 각 타일에 대해 타일 너비가 포인트 (가로 세로 (수직))가되고, 행의 처음으로 돌아가 타일 길이가 만큼 아래로 변환됩니다. 포인트는 다음 행에 도착합니다. –

+0

훌륭한 트릭. CoreGraphics는 그러한 불량 프레임 워크입니다. –