Ответ 1
Для одного пальца это довольно просто: запустите таймер в методе touchhesBegan и активируйте действие при срабатывании таймера. Отмените таймер, если вы получите касание "Eneded" перед тем, как он выстрелил. Здесь реализована реализация, использующая метод performSelector... afterDelay.
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self performSelector:@selector(fireLongPress)
withObject:nil
afterDelay:LONG_PRESS_THRESHOLD];
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
[NSObject cancelPreviousPerformRequestsWithTarget:self];
}
- (void)fireLongPress {
// do what you want to do
}
Вероятно, вы также захотите убить таймер, если палец перемещается слишком далеко.
С мультитач, это немного сложнее. Вам нужно будет отслеживать, какое именно касание это, и решить, что делать, например. когда один палец нажал достаточно долго, а другой нет (или выяснить, что делает UILongPressGestureRecognizer).