我有一个使用整个屏幕的iPad应用程序(也就是说,在Info.plist文件中将UIStatusBarHidden设置为true)。主窗口和主 View 的框架设置为(0,0,768,1024)。主 View 已启用多点触摸。

View Controller 具有以下代码来处理触摸:

- (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。(这是known issue,模拟器未报告前2​​0位的触摸屏幕像素,即使没有状态栏也是如此。)

这是奇怪的事情:当我在实际的iPad上运行该应用程序时,X值按预期从0到767,但是报告的Y值从-6到1017,而不是我期望的0到1023。

它似乎可以在模拟器上正常工作的事实使我怀疑真实设备的触摸屏没有得到很好的校准,而我的报告的Y值仅错开了6个像素。任何人都可以验证这种情况吗?否则,是否还有其他原因可以解释Y值与我期望值相差六个像素?

(几天后,我应该有了第二台iPad,以便可以在另一台设备上进行测试并比较结果。)

最佳答案

做一些快速测试,我注意到了同样的事情。我开始了一个基于基本 View 的项目,除了以下代码外,没有任何更改:

(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。添加一些变量来跟踪max和min可使我成为iPad的转折点:{-5,2},{758,2},{-5,1019},{758,1019}。

关于iphone - 校准会导致iPad/iPhone接触点错误吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2733868/

10-15 11:58