我有一个自定义UIView,其中包含在视图的drawRect函数中绘制的交互式绘图。在iPad上,绘图尺寸为1024 x 768.对于iPhone,我使用CGContextScaleCTM缩小了iPhone的绘图。为了在我的绘图上保持适当的宽高比,我将视图缩小到480 x 360,并将视图的y值设置为-20(从视图的顶部和底部有效裁剪20个像素,这很好)。现在一切看起来都很正确,但我需要将触摸坐标从iPhone转换为iPad坐标,以便我的视图的交互部分能够正常工作。如果我将uiview 320设为高并使用
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));
}
有人可以帮我做这个转换吗?谢谢!
答案 0 :(得分:3)
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;
这样,你会更清楚地了解你的实际行动。