Могут ли сенсорные точки iPad / iPhone быть неправильными из-за калибровки? - PullRequest
8 голосов
/ 29 апреля 2010

У меня есть приложение для iPad, которое использует весь экран (то есть UIStatusBarHidden установлено в true в файле Info.plist). Рамки основного окна и основного вида установлены на (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));
    }
}

Когда я запускаю приложение в симуляторе, оно работает почти так же, как и ожидалось. Когда я перемещаю мышь от одного края экрана к другому, сообщаемые значения Х изменяются от 0 до 767. Сообщаемые значения Y изменяются от 20 до 1023. (Это известная проблема , которую симулятор не ' t сообщает касания в верхних 20 пикселях экрана, даже если строка состояния отсутствует.)

Вот что странно: Когда я запускаю приложение на реальном iPad, значения X меняются от 0 до 767, как и ожидалось, но сообщаемые значения Y меняются от -6 до 1017, а не от 0 до 1023 как Я ожидаю.

Тот факт, что на симуляторе он работает должным образом, заставляет меня подозревать, что сенсорные экраны реальных устройств не откалиброваны идеально, и мое просто сообщает значения Y, которые отключены на шесть пикселей. Кто-нибудь может проверить, что это так? Иначе, есть ли что-нибудь еще, что могло бы объяснить, что значения Y находятся в шести пикселях от ожидаемого?

(Через несколько дней у меня должен появиться второй iPad, чтобы я мог проверить это на другом устройстве и сравнить результаты.)

Ответы [ 2 ]

1 голос
/ 24 августа 2012

Я получаю разные значения для разных UIInterfaceOrientations

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

Учитывая это, я бы предположил, что это проблема программного обеспечения, а не устройства.

1 голос
/ 29 апреля 2010

Проводя быстрое тестирование, я заметил то же самое. Я запустил проект с базовым представлением, в котором ничего не изменилось, но следующий код:

(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 и никогда не достигает 0 по оси Y. Добавление некоторых переменных для отслеживания макс и мин дает мне эти углы нашего iPad: {-5, 2}, {758, 2}, {-5, 1019}, {758, 1019}.

...