touchesMoved(): это единственный API отслеживания пальцев? и это точно?
Я пишу приложение для iPad, которое требует точного определения времени движения пальца, поэтому я стремлюсь добиться максимальной производительности и точности. У меня есть два вопроса по этому поводу:
Должен ли я использовать touchesMoved() для перехвата положения пальца на экране или есть API более низкого уровня?
Кто-нибудь знает, возвращает ли touchesMoved() точное положение на экране, или iPad выполняет некоторую интерполяцию?
Спасибо!
2 ответа
У вас есть 3 способа перехвата позиций пальцев: a) Методы делегирования UIResponder:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;
б) методы UIGestureRecognizer
в) Вы также можете переопределить - (void) событие sendEvent:(UIEvent *); в UIApplicationDelegate или UIWindow для отлова UIEvents - но этот метод не рекомендуется.
Все эти методы работают с UITouch, которые содержат точку касания. Эта точка рассчитывается аппаратным обеспечением устройства, поэтому вы не можете повлиять на точность.
И последнее: минимальная рекомендуемая площадь касания составляет 44х44. Если вы коснетесь области, которая будет меньше, пользователи будут чувствовать себя неудобно, работая с вашим программным обеспечением.
Прикосновения не очень точные, потому что пальцы не очень точные (намного меньше, чем курсор мыши), и потому что оборудование для отслеживания не очень точное (потому что это не нужно, из-за размера пальца - оно не работает) без значительной области касания).
При этом у iDevices есть очень хорошие сенсорные экраны по сравнению со многими другими емкостными сенсорными устройствами. Я просто не уверен, что точность пикселей достижима на практике.
Впрочем, с этим легко экспериментировать.