2012-03-26 3 views
2

보기의 drawRect 기능에 그려지는 대화식 그림이 포함 된 사용자 정의 UIView가 있습니다. iPad에서는 드로잉 크기가 1024 x 768입니다. iPhone의 경우 CGContextScaleCTM을 사용하여 iPhone 용 드로잉을 축소합니다. 드로잉에서 적절한 종횡비를 유지하려면 뷰를 480 x 360으로 축소하고 뷰의 y 값을 -20으로 설정합니다 (뷰의 위쪽과 아래쪽에서 20 픽셀 잘립니다). 모든 것이 정확 해 보이지만, 내보기의 대화 형 부분이 작동하려면 iPhone에서 iPad 좌표로 터치 좌표를 변환해야합니다. 내가있는 UIView (320) 고하고 y 값을 변환좌표를 iPhone 화면 크기에서 iPad 화면 크기로 변환

point.y *=768/320 

를 사용하는 경우 위치 (하지만 내 그림이 왜곡) 나는 열심히이 일을해야 알고 있지만 나는 그렇게에서 포인트를 코딩 몇 가지 테스트를 완료했습니다 올바른지 작물을 가지고 수학을하기가 힘들어. 여기 내가 지금까지 가지고있는 것입니다 :

CGPoint point = [[touches anyObject] locationInView:self.view]; 
[self endTouch:&point]; 
NSLog(@"true point: %@",NSStringFromCGPoint(point)); 
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { 
point.x *= 1024/480; 
point.y *= 768/360; 
NSLog(@"corrected point: %@",NSStringFromCGPoint(point)); 
} 

누구든지이 변환을 도와 줄 수 있습니까? 감사!

답변

3

1024/480768/360은 정수 나누기를 수행합니다. 두 작업의 결과는 2이지만 실제로는 2.133333이 필요합니다. 다음과 같이 코드의 관련 라인을 교체 :

point.x *= 1024.0/480.0; 
point.y *= 768.0/360.0; 

이것은 당신이 찾고있는 값을 반환하고 그에 따라 점의 xy 값을 조정됩니다.

이 리터럴을 #define 매크로로 바꾸면 더 잘 읽을 수 있습니다 (가독성 측면에서). 다음

#define SCALING_FACTOR_X (1024.0/480.0) 
#define SCALING_FACTOR_Y (768.0/360.0) 

및 그 사용하도록 코드를 수정 :

point.x *= SCALING_FACTOR_X; 
point.y *= SCALING_FACTOR_Y; 

그 방법, 그것은에 관해서는 더 명확 할 것이다 당신이 실제로 무슨 일을하는지 코드의 맨 위에 다음을 넣어 .

+0

고마워! 내가 전에 얻었던 기괴함을 설명해 준다. 팁 #define 매크로도 가져 주셔서 감사드립니다. 저것은 C 것입니까? 객관적인 것입니까? 나는 이것들이 인터넷 주위에서 약간의 코드로 사용되는 것을 보았지만 배우기 시작한 객관적 - c 책들 중 어떤 것에도 나오지 않았다. – Frank

+0

@jonmorgan 그 반대는 무엇입니까? iPad 좌표를 iPhone 좌표로 변환해야합니다. 어떤 팁? – Corey

관련 문제