将坐标从iPhone屏幕大小转换为iPad屏幕大小

将坐标从iPhone屏幕大小转换为iPad屏幕大小

问题描述:

我有一个自定义UIView,其中包含绘制在视图的drawRect函数中的交互式绘图。在iPad上,绘图大小为1024 x 768.对于iPhone,我使用CGContextScaleCTM缩小iPhone的绘图。为了在我的绘图上保持适当的宽高比,我将视图缩小为480 x 360,并将视图的y值设置为-20(从视图的顶部和底部有效裁剪20个像素,这很好)。现在一切都看起来正确,但我需要将iPhone的触摸坐标转换为iPad坐标,以便我的视图的交互部分能够正常工作。如果我做的UIView 320高和使用将坐标从iPhone屏幕大小转换为iPad屏幕大小

point.y *=768/320 

转换的y值的位置是正确的(但我的画是扭曲的)我已经做了一些测试硬编码点,所以我知道这应该工作,但我我很难让数学与作物一起工作。以下是我迄今为止:

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)); 
} 

任何人可以帮助我做这种转换?谢谢!

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的事情还是客观的事物?我已经看到这些代码来自网络中的一些代码,但在我开始学习的任何Objective-C书籍中都没有遇到过。 – Frank 2012-03-26 15:22:39

+0

@jonmorgan什么是相反的?我需要将iPad坐标转换为iPhone坐标。有小费吗? – Corey 2013-03-08 16:20:42