【问题标题】:Convert coordinates from iPhone screen size to iPad screen size将坐标从 iPhone 屏幕尺寸转换为 iPad 屏幕尺寸
【发布时间】:2012-04-10 00:04:39
【问题描述】:

我有一个自定义 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));
}

谁能帮我做这个转换?谢谢!

【问题讨论】:

    标签: iphone objective-c ipad uiview


    【解决方案1】:

    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;
    

    这样,你会更清楚你实际在做什么。

    【讨论】:

    • 谢谢!这解释了我之前遇到的怪事。也感谢#define 宏的提示。那是C的东西还是objective-c的东西?我在网上的一些代码中看到了这些,但在我开始学习的任何 Objective-c 书籍中都没有遇到过。
    • @jonmorgan 反过来是什么?我需要将 iPad 坐标转换为 iPhone 坐标。有什么建议吗?
    猜你喜欢
    • 1970-01-01
    • 2015-01-31
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多