Una doppia pressione rapida è in effetti un'azione dell'utente singolo, poiché questo è il comportamento desiderato in quasi tutte le applicazioni che utilizzano il controllo dell'auricolare per l'input. Salva gli sviluppatori che devono rimbalzare, accodare e analizzare manualmente gli eventi di controllo in ingresso ed è una buona cosa (tm)!
Per far funzionare questo sistema, il sistema introdurrà una piccola quantità di ritardo mentre attende ulteriori input da parte dell'utente. Ci vorranno solo poche centinaia di millisecondi per completarlo, dopodiché riceverai l'evento nel tuo codice.
Un lungo, doloroso, ma si spera utile esempio di premere due volte il rilevamento:
- utente preme verso il basso sul controllo auricolare
- avvisi di sistema stampa, attende il rilascio
- di controllo utente rilascia auricolare
- Avvisi di sistema, rileva la pressione del pulsante (pressione prolungata vs pressione breve) e mette in coda l'evento a pressione singola
- Il sistema attende 200 ms nel caso si tratti di una doppia pressione
- Lo è! Utente preme sul controllo auricolare
- comunicazioni di sistema pressa, attende rilascio
- controllo stampa auricolare utente
- sistema converte coda singolo evento stampa in doppio-press evento
- sistema attende 200ms nel caso è una tripla -premere
- Nessun input dell'utente all'interno di 200ms
- sistema spara doppio stampa evento e cancella la coda
vedere come il ritardo è necessario per il rilevamento di singola/doppia/tripla pressione.
Quando l'evento raggiunge l'applicazione avrà un sottotipo che descrive il tipo di selezionare l'utente ha fatto:
let rc = event!.subtype
print("received remote control \(rc.rawValue)") // 101 = pause, 100 = play
switch rc {
case .RemoteControlTogglePlayPause:
// ..
case .RemoteControlPlay:
// ..
case .RemoteControlPause:
// ..
default:break
}
una risposta su un similar question rilevare questi numeri interi codice evento sarà qualcosa di simile;
100 = play
101 = pause
103 = single mic click
104 = double mic click
105 = triple mic click
etc ...
Le azioni di doppia pressione su molte piattaforme vengono gestite come un singolo evento utente. UIEventTypeRemoteControl contiene proprietà che indicano quante volte è stato premuto il pulsante? –
Che tipo di ritardo "ritardo" stai ottenendo? Tra mezzo secondo e un secondo? Pochi secondi? Potete fornire un progetto di esempio o un caso di test riproducibile? – JAL