Para un niño de seis segunda pulsación larga, utilice un UILongPressGestureRecognizer
con su minimumPressDuration
propiedad establecida en 6.
Escriba su propia gesture recognizer (por ejemplo, LongTappingGestureRecognizer
) para la colada continua durante un período determinado; no debería ser demasiado complicado. Bríndele una propiedad como minimumPressDuration
(por ejemplo, minimumTappingDuration
) y una propiedad (por ejemplo, maximumLiftTime
) que determina cuánto tiempo se puede levantar un dedo antes de que no se lo considere un gesto prolongado.
- Cuando recibe por primera vez
touchesBegan:withEvent:
, registre la hora.
- Cuando recibe
touchesEnded:withEvent:
, inicie NSTimer
(el temporizador de elevación) que envía un mensaje de cancelación al reconocedor de gestos (por ejemplo, cancelRecognition
) después de maximumLiftTime
.
- Cuando recibe
touchesBegan:withEvent:
cuando hay una hora de inicio, cancele el temporizador de elevación (si lo hay).
- El
cancelRecognition
pasará al failed state.
Hay varias estrategias para manejar el reconocimiento cuando se llega al final del gesto, después de minimumTappingDuration
. Una es verificar en los controladores touchesBegan:withEvent:
y touchesEnded:withEvent:
si la diferencia entre la hora actual y la hora de inicio es> = minimumTappingDuration
. El problema con esto es que tomará más de minimumTappingDuration
reconocer el gesto si el usuario está tocando lentamente y su dedo está hacia abajo cuando se alcanza el minimumTappingDuration
. Otro enfoque es iniciar otro NSTimer (el temporizador de reconocimiento) cuando se recibe el primer touchesBegan:withEvent:
, uno que causará la transición al recognized state y que se cancela en cancelRecognition
. Lo difícil aquí es qué hacer si el dedo se levanta cuando el temporizador se dispara. El mejor enfoque podría ser una combinación de los dos, ignorando el temporizador de reconocimiento si se levanta el dedo.
Hay más en los detalles, pero esa es la esencia. Básicamente, es un reconocedor de pulsación larga que permite al usuario levantar su dedo de la pantalla por breves períodos. Puede utilizar solo el reconocedor de tapping y omitir el reconocedor de pulsación larga.
Fwiw, OP describe dos situaciones que deben ser reconocidos. Una es una sola pulsación larga (que este código detecta). El otro es un tapping repetido durante un período de seis segundos (que este código no detecta, ¿no?). De todos modos, el código anterior será útil para la mayoría de las personas, que solo quieren saber cómo establecer un requisito de longitud mínima para la pulsación larga. – ToolmakerSteve