Per una seconda pressione prolungata di sei, utilizzare un UILongPressGestureRecognizer
con la proprietà minimumPressDuration
impostata su 6.
Scrivi la tua gesture recognizer (diciamo, LongTappingGestureRecognizer
) per la maschiatura continua per un determinato periodo; non dovrebbe essere troppo difficile. Assegnare una proprietà come (ad esempio, minimumTappingDuration
) e una proprietà (ad esempio, maximumLiftTime
) che determina per quanto tempo un dito può essere rimosso prima che non venga considerato un lungo gesto di tocco.
- Quando riceve per la prima volta
touchesBegan:withEvent:
, registra l'ora.
- Quando riceve
touchesEnded:withEvent:
, avviare un NSTimer
(il timer di sollevamento) che invia al rilevatore di gesti un messaggio di annullamento (ad esempio cancelRecognition
) dopo maximumLiftTime
.
- Quando riceve
touchesBegan:withEvent:
quando c'è un'ora di inizio, annullare il timer di sollevamento (se presente).
- Il
cancelRecognition
passerà allo failed state.
Esistono varie strategie per la gestione del riconoscimento al raggiungimento della fine del gesto, dopo minimumTappingDuration
. Uno è di controllare sia i gestori touchesBegan:withEvent:
e touchesEnded:withEvent:
se la differenza tra l'ora corrente e l'ora di inizio è> = minimumTappingDuration
. Il problema è che ci vorrà più tempo di minimumTappingDuration
per riconoscere il gesto se l'utente sta toccando lentamente e il dito è abbassato quando viene raggiunto lo minimumTappingDuration
. Un altro approccio consiste nell'avviare un altro NSTimer (il timer di riconoscimento) quando viene ricevuto il primo touchesBegan:withEvent:
, uno che causerà la transizione allo recognized state e che viene annullato in cancelRecognition
. La cosa complicata qui è cosa fare se il dito viene sollevato quando il timer scatta. L'approccio migliore potrebbe essere una combinazione dei due, ignorando il timer di riconoscimento se il dito viene sollevato.
C'è di più nei dettagli, ma questo è il succo. Fondamentalmente, è un sistema di riconoscimento a lunga pressione che consente all'utente di sollevare il dito dallo schermo per brevi periodi. Potresti potenzialmente utilizzare solo il riconoscimento toccando e saltare il riconoscimento a lungo.
FWIW, OP descrive due situazioni che dovrebbero essere riconosciuti. Uno è una singola pressione lunga (che questo codice rileva). L'altro è una ripetuta intercettazione su un periodo di sei secondi (che questo codice non rileva, credo?). Ad ogni modo, il codice sopra riportato sarà utile alla maggior parte delle persone, che vogliono solo sapere come impostare un requisito di lunghezza minima per la stampa lunga. – ToolmakerSteve