Для одного пальца это довольно просто: запустите таймер в методе touchesBegan
и запустите действие, когда таймер сработает. Отмените таймер, если вы получите touchesEnded
до его срабатывания. Вот реализация, которая использует метод performSelector:withObject: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
).