由于校准问题,iPad/iPhone的触摸点是否可能出现错误?

8
我有一个iPad应用程序,使用整个屏幕(也就是说,在Info.plist文件中设置了UIStatusBarHidden为true)。主窗口和主视图的框架被设置为(0, 0, 768, 1024)。主视图启用了多点触控。
视图控制器有以下代码来处理触摸:
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    for (UITouch *touch in touches) {
        CGPoint location = [touch locationInView:nil];
        NSLog(@"touchesMoved at location %@", NSStringFromCGPoint(location));
    }
}

当我在模拟器中运行应用程序时,它基本按预期工作。当我将鼠标从屏幕的一侧移动到另一侧时,报告的X值从0变为767。报告的Y值从20到1023。(这是一个已知问题,即使没有状态栏,模拟器也不会报告屏幕顶部20个像素的触摸。)
以下是奇怪的事情:当我在实际的iPad上运行应用程序时,X值如预期的从0到767,但报告的Y值从-6到1017,而不是我预期的0到1023。
它似乎在模拟器上正常工作的事实让我怀疑真实设备的触摸屏并不完全校准,我的设备只是报告了偏差为六个像素的Y值。有人可以验证这种情况吗?否则,还有什么其他因素可以解释Y值与我预期的偏差六个像素?
(几天后,我会有第二个iPad,所以我可以测试另一个设备并比较结果。)
2个回答

1

在进行一些快速测试时,我注意到了同样的事情。我启动了一个基本的视图项目,除了以下代码之外没有做任何更改:

(iPadTestsAppDelegate)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];

    // Override point for customization after app launch    
    viewController.view.multipleTouchEnabled = YES;
    viewController.view.userInteractionEnabled = YES;

    [window addSubview:viewController.view];
    [window makeKeyAndVisible];

    return YES;
}

(iPadTestsViewController)

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    for (UITouch *touch in touches) {
        CGPoint location = [touch locationInView:nil];
        NSLog(@"touchesMoved at location %@", NSStringFromCGPoint(location));
    }
}

当我触摸屏幕边缘时,它会报告x轴上的负数,并且永远不会在y轴上达到0。添加一些变量来跟踪最大值和最小值,这些变量给出了我们iPad的四个角落坐标:{-5, 2},{758, 2},{-5, 1019},{758, 1019}。

iPhone怎么样?你能在上面运行同样的测试并看看它的表现如何吗? - jamone
Jamone:抱歉,我目前手头上没有iPhone。 - MrHen

1

我在不同的UIInterfaceOrientations下得到了不同的值

UIInterfaceOrientation ori = [UIApplication sharedApplication].statusBarOrientation;
CGPoint point = [touch locationInView:self];

鉴于此,我认为这是软件问题,而不是设备问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接