2011-03-30 4 views
6

저는 CGRect입니다. 좌표를 사용자 좌표계로 전송할 수 있습니까? 예 : 왼쪽 하단 모서리 대신 맨 위 왼쪽 모서리 대신 맨 위 모퉁이로 이전 할 수 있습니까? 이것을 위해 미리 정의 된 방법이 있습니까? 아니면 수동으로 계산해야합니까? 미리 감사드립니다.CGrect 값을 사용자 좌표계로 변경

+0

대답은 그 CGRect 변환의 사용량에 따라 달라집니다 있습니다. 변환 된 직사각형으로 무엇을 할 계획입니까? – Anurag

+0

나는 기본 좌표계 (사용자)에서 선 직사각형 값을 가지므로 이제 iphone 사용 좌표계에서 좌표를 원한다. – ajay

+0

원점이 왼쪽 하단에있는 좌표계에서 직사각형을 가지고 있으며이를 iOS 좌표계로 변환 하시겠습니까? 기본 좌표계에서 가지고있는 직사각형의 예를 게시 할 수 있습니까? – Anurag

답변

12

원점이 왼쪽 위 (iPhone 좌표계)에있는 시스템으로 사각형의 왼쪽 하단에 원점이있는 좌표계 (이름을 지정하기 위해 기존 좌표계라고 부름)를 변환하려면 뷰가 사각형의 참조이므로 CGRect 인 뷰의 크기를 알아야합니다.

예를 들어 200 x 300 크기의 화면이 있고 CGRect 크기가 CGRectMake(10, 20, 30, 40) 인 경우를 예로 들어 보겠습니다. CGRect의 크기는 동일하게 유지됩니다. 원래 좌표계와 iPhone 좌표계가 모두 왼쪽에서 시작하기 때문에 (왼쪽 하단에 하나, 왼쪽 상단에 다른 하나), 변경되는 모든 것이 원점입니다. 실제로 y 좌표 만 변경되며 x 좌표는 변경되지 않습니다.

그러면 CGRectMake(10, y, 30, 40)과 같은 값을 갖게됩니다. 아이폰 (왼쪽)에서 좌표계를 측정

- (CGRect)rectangle:(CGRect)oldRect fromTraditionalToiPhoneCoordinatesWithReferenceViewOfSize:(CGSize)aSize 
    { 
     CGFloat oldY = oldRect.origin.y; // This is the old y measured from the bottom left. 
     CGFloat newY = aSize.height - oldY - oldRect.size.height; 

     CGRect newRect = oldRect; 
     newRect.origin.y = newY; 

     return newRect; 
    } 

새로운 사각형

는 것이다 : CGRectMake(10, 300 - 20 - 40, 30, 40) = CGRectMake(10, 240, 30, 40).

는 희망이 이미지는 명확 Hopefully this image makes it clearer

+0

+1 정말 감사합니다. – ajay