在IPad3上屏幕触摸位置

时间:2012-12-02 23:47:03

标签: ipad touch

我正在为iPhone和iPad写一个OpenGL游戏iPad,由屏幕触控控制。这是一个通用的应用程序,所以我在touchesBegan中有代码将任何触摸位置转换为0.0-1.0的范围(屏幕的一侧到另一侧,这是应用程序的其余部分需要获取触摸信息的方式)。执行此操作的代码是:

CGPoint touchLocationPx;
GLFloat xx;

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    touchLocationPx = [touch locationInView:self];    // touchLocationPx.x & .y are in points, not pixels...
    xx = (GLfloat)touchLocationPx.x / (GLfloat)(self.frame.size.width);    // self.frame.size.width is also in points,
                                                                           // so xx is in the range 0.0 to 1.0...

}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    // Set xx to a dummy value that will not be processed by the rest of the app...
    xx = -999.999;
}

它依赖于[touch locationInView:self]和self.frame.size.width始终处于相同的单位(点数而不是我所理解的像素),无论它是非视网膜屏幕,还是视网膜屏幕[UIIScreen mainScreen] .scale = 2.0,或x1或x2模式的iPad。 (我自己的测试设备是iPhone 4S,如果我监控屏幕尺寸和触摸位置,它们都按预期以点(480,320)报告。 但是我从那时起就听说iPad3上的控件没有响应。屏幕尺寸和触摸位置在此设备上的处理方式不同吗?或者是否有其他原因导致我的代码无法正确转换触摸位置? (在模拟器上,所有设备类型都能很好地工作,包括视网膜iPad。我知道模拟器永远不会与真实设备完全匹配,但是报告触摸位置的基本内容应该在那里正确。任何想法真实设备失败的原因?)

谢谢,

萨姆。

0 个答案:

没有答案