iOS 개발을 하다보면 화면에 직접 그림을 그리거나 이미지를 리사이즈 하거나 크롭하는등의 이미지 핸들링을 할 때가 있습니다. 이때 많은 분들이 공개되어 있는 샘플 소스를 참조하여서 프로그래밍을 하실텐데요. 대부분의 분들이 이해없이 그냥 저렇게 사용하니 그냥 습관적으로 사용하는 부분이 있습니다. 바로 CGContextTranslateCTM 와 CGContextScaleCTM 이라는 함수 입니다.
저도 그냥 샘플소스 복사해서 쓰다가, 이번기회에 이해를 좀 해보았습니다. 역시나 이해하고나니 별거 아니더라는... -_-;;;
일단 제 경우에는 문서에 나와있는 말이 좀 애매해서 문서만 보고서는 이해가 좀 힘들었습니다. 그래서 제 나름대로 정의를 내려보면 다음과 같습니다.
void CGContextTranslateCTM ( CGContextRef c, CGFloat tx, CGFloat ty );
컨텍스트 좌표의 원점(0,0)을 x , y 크기 만큼 이동 시켜 줍니다.
예를 들어
CGContextTranslateCTM(context, 0.0, 480);
이라고 사용하면 일반적으로 iOS 에서 사용하는 좌표의 원점인 왼쪽 위의 원점이 왼쪽 아래로 잡히게 됩니다.
void CGContextScaleCTM ( CGContextRef c, CGFloat sx, CGFloat sy );
컨텍스트 x,y 좌표의 +,- 방향을 바꾸고 좌표계의 비율을 변경 해 줍니다.
예를 들어
CGContextScaleCTM(context, 1.0, -1.0);
이라고 사용하면 X,Y 축의 비율은 1.0으로 동일하고, Y 축 좌표가 아래에서 위로가는 방향이 + 방향으로 변경됩니다.
예제코드를 통해서 확실히 의미를 이해해 보도록 하겠습니다.
위와 같이 코드를 작성하면 결과는 다음과 같이 됩니다.
이미지도 Quartz 로 불러온것이기 때문에 Quartz 좌표계를 따르는데요, 이때문에 위 두 함수를 적용하지 않은채 컨텍스트에 그림을 그리면 이미지가 상하 반전되어서 나오게 됩니다. 따라서 좌표계를 반전 시켜주시고 그림을 그리면 원상태로 나오게 되는것이지요.
Quartz 의 좌표의 원점은 왼쪽 아래고, + 방향은 위쪽과 오른쪽 입니다. 이점을 먼저 인지 하시고 위 함수들의 변수값을 조정하시면서 테스트를 해보시면 좀더 이해가 빨리 됩니다.
'개발&팁 > Mac & Cocoa & iPhone' 카테고리의 다른 글
xcode3 에서 Target 을 이용한 프로젝트 관리 (3) | 2011.02.23 |
---|---|
UIViewController 의 viewDidUnload 가 불리는 시점. (5) | 2011.02.19 |
iOS 3.0 과 4.0 에서의 이미지 불러오기. (0) | 2010.09.07 |
imageNamed 와 imageWithContentsOfFile 의 차이. (2) | 2010.08.13 |
xcode 환경에서 디버깅 로그함수 편리하게 관리하기 (1) | 2010.04.09 |