将坐标从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/480
和768/360
执行整数除法。两个操作的结果是2
,但您真的需要2.133333
。用以下替换您的代码中的相关行:
point.x *= 1024.0/480.0;
point.y *= 768.0/360.0;
这将返回你正在寻找的价值,并相应地扩展您点的x
和y
值。
通过将这些文字替换为#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;
这样的话,它会以更清楚你实际上在做。
谢谢!这解释了我之前得到的奇怪。感谢#define宏的提示。这是一个C的事情还是客观的事物?我已经看到这些代码来自网络中的一些代码,但在我开始学习的任何Objective-C书籍中都没有遇到过。 – Frank 2012-03-26 15:22:39
@jonmorgan什么是相反的?我需要将iPad坐标转换为iPhone坐标。有小费吗? – Corey 2013-03-08 16:20:42