2010-12-30 6 views
10

UILongPressGesture está disponible en ios ver 3.2 y posterior. Pero estoy tratando de desarrollar aplicaciones para una máxima compatibilidad y por lo tanto la orientación ios ver2.0Cómo obtener la funcionalidad del gesto de Pulsación larga en iOS por debajo de 3.2

Puede alguien por favor me guía sobre cómo llevar a cabo a largo gesto de prensa en iOS v2.0

+1

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. –

Respuesta

18

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).

+5

Tuve que usar '[NSObject cancelPreviousPerformRequestsWithTarget: self]' en su lugar. –

1

Implementar los métodos touches... en su punto de vista. Si pasa una cierta cantidad de tiempo entre touchesBegan:withEvent: y touchesEnded:withEvent: sin ningún evento touchesMoved:withEvent:, tiene una pulsación larga.

Cuestiones relacionadas