2012-07-31 5 views
8

간다, 나는이 결론 :CGAffineTransform 회전 내 실험에서 잘못된 방향으로

YourView.transform = CGAffineTransformMakeRotation(positive value); 

뷰를 시계 방향으로 회전하며,

YourView.transform = CGAffineTransformMakeRotation(Negative value); 

은 시계 반대 방향으로 뷰를 회전합니다,

하지만 문서 :

아핀 transfo를 회전시키는 각도 (라디안 단위) rm. iOS에서 양수 값은 반 시계 방향 회전을 지정하고 음수 값은 시계 방향 회전을 지정합니다.

이들은 서로 모순이 있습니까?

+0

필자는 지금 테스트를 통해 동일한 결과를 얻었습니다. 문서는 OSX에서이 동작이 있음을 명시합니다. 네가 말했듯이, 아주 이상해. – Pochi

+0

'value'happen은 π/2가 되나요? –

+0

@bigitia : 네, π/2와 -π/2를 시도했습니다 – romox

답변

23

귀하의 혼란은 이해할 수 있습니다.

사실, 양의 각도는 양의 X 축에서 양의 Y 축을 향하는 회전을 나타냅니다. 음의 각도는 양의 X 축에서 음의 Y 축으로의 회전을 나타냅니다.

"기본"코어 그래픽 좌표계는 표준 Cartesian coordinate system을 모델로 한 것으로 Y 축은 페이지에서 위로으로 증가합니다. 이 시스템에서 정의 각도가 시계 반대 방향으로 회전 대표 : 그래서

normal coordinate system

를 작성하면 자신의 CGContext 예상대로 (예를 들어, CGBitmapContextCreate 또는 CGPDFContextCreate를 사용하여), 회전이 작동합니다.

그러나 컴퓨터 시스템은 Y 축이 인 페이지에서으로 증가하는 좌표계를 사용했습니다. 이런 좌표 대칭 시스템에서는, 양의 각은 시계 방향 회전을 나타낸다 : 좌표 시스템 모두에서 양의 각도는 양의 Y 축 방향으로 양의 X 축에서 회전하도록

flipped coordinate system

통지한다.

UIKit은 자신을 위해 생성 한 그래픽 컨텍스트의 좌표계를 뒤집습니다. 여기에는 drawRect:을 보내기 전에 설정 한 그래픽 컨텍스트와이 그래픽 컨텍스트가 UIGraphicsBeginImageContext에 설정되어 있습니다. (Quartz 2D Programming Guide에서 이에 대해 설명합니다.) 현재 변환 행렬 (CGContextGetCTM 사용)을 보면이를 확인할 수 있습니다. d 요소에 -1이라는 요소가 있는데, 이는 Y 축이 뒤집 혔음을 의미합니다.

UIView은 또한 해당 하위보기를 배치하기 위해 뒤집힌 좌표계를 사용하며 UIViewtransform 속성의 의미에 영향을 미칩니다.

+0

thx 많이 고맙습니다! – romox

+1

하지만 뒤집힌 좌표계에서는 양의 각도가 시계 방향의 회전을 나타내지 만 문서에서는 "iOS에서 양수 값은 반 시계 방향의 회전을 지정합니다."라고 말합니다. 그래서 나는 여전히 모순적이라고 생각합니다. 문서가 잘못 되었습니까? – romox

+0

때때로 잘못되었습니다. 변환을 사용하는 컨텍스트에 따라 다릅니다. –

관련 문제