Para un solo dedo, es bastante simple: iniciar un temporizador en el método touchesBegan y desencadenar una acción cuando el temporizador se dispara. Cancele el temporizador si recibe un toque Antes de que se dispare. Aquí hay una implementación que usa el método 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
}
Probablemente también querrá matar el temporizador si el dedo se mueve demasiado.
Con multitouch, es un poco más complicado. Deberá hacer un seguimiento de qué toque es cuál y decidir qué hacer, p. cuando un dedo se ha presionado lo suficiente pero el otro no (o descifrar qué hace UILongPressGestureRecognizer).
Tenga en cuenta que no puede admitir iPhone OS 2.x si lo está enviando a la App Store. El objetivo de versión mínima aceptado por Apple ahora es 3.0. –