2015-10-14 12 views
13

Ich versuche, verschiedene Aktionen nur in meiner eigenen App mit Tasten des angeschlossenen Headset (etwas ähnliches, was pressy tut) zu lösen. Ich bemerkte jedoch, dass egal ob ich MPRemoteCommandCenter oder remoteControlReceivedWithEvent Delegate verwende, ich Ereignisse mit einer merkbaren Verzögerung erhalte. Was die Sache schlimmer macht, ist, dass wenn ich zweimal schnell auf die Taste drücke, ich nur eine UIEventTypeRemoteControl bekomme.Latenz beim Drücken der Headset-Taste in iPhone

Hat jemand ein ähnliches Problem, kennen Sie den Grund dafür oder besser noch eine Workaround? Getestet unter ios8 und ios9.

+0

Double-Press-Aktionen auf vielen Plattformen werden als Einzelbenutzerereignis behandelt. Enthält UIEventTypeRemoteControl Eigenschaften, die angeben, wie oft die Schaltfläche gedrückt wurde? –

+0

Welche Art von Zeitverzögerung "Lag" bekommen Sie? Zwischen einer halben Sekunde und einer Sekunde? Ein paar Sekunden? Können Sie bitte ein Beispielprojekt oder einen reproduzierbaren Testfall bereitstellen? – JAL

Antwort

1

Ein schneller Doppeldruck ist in der Tat eine einzelne Benutzeraktion, da dies das gewünschte Verhalten in fast jeder Anwendung ist, die das Headset-Steuerelement für die Eingabe verwendet. Es erspart Entwicklern das manuelle Entprellen, Queue- ren und Parsen eingehender Steuerungsereignisse und ist ein Good Thing (tm)!

Damit dies funktioniert, führt das System eine kleine Verzögerung ein, während es auf weitere Benutzereingaben wartet. Es sollte nur ein paar hundert Millisekunden dauern, bis dies abgeschlossen ist. Danach erhalten Sie das Ereignis in Ihrem Code.

Ein langes, schmerzhaft, aber hoffentlich nützliches Beispiel für Doppel Presse-Erkennung:

  1. Benutzer auf Headset Steuerung unten
  2. -System drückt Hinweise Presse, wartet auf Freigabe
  3. Benutzermitteilungen Headset Steuer
  4. Systemmeldungen werden losgelassen, erkennt, dass die Zeittaste gedrückt wurde (langes Drücken vs. kurzes Drücken) und wartet einmaliges Drücken des Ereignisses
  5. System wartet 200 ms, wenn zweimal gedrückt wird
  6. Es ist! Benutzer drückt nach unten auf Headset Steuer
  7. System-Mitteilungen Presse, wartet auf Freigabe
  8. Benutzermitteilungen Headset Steuer
  9. -System Single-Presse-Event in doppelsträngige Presse-Event
  10. System wartet 200 ms bei der Warteschlange wandelt es ist ein Tripel -Drücken
  11. keine Benutzereingabe innerhalb 200ms
  12. Systems feuert Doppeldruckereignis und löscht die Warteschlange

sehen, wie die Verzögerung ist, notwendig für Einzel-/Doppel-/Dreifach-Druckerkennung.

Wenn das Ereignis der Anwendung erreicht wird es einen Subtyp haben, die, welche Art beschreibt der Benutzer aus klicken:

let rc = event!.subtype 
print("received remote control \(rc.rawValue)") // 101 = pause, 100 = play 

switch rc { 
    case .RemoteControlTogglePlayPause: 
     // .. 
    case .RemoteControlPlay: 
     // .. 
    case .RemoteControlPause: 
     // .. 
    default:break 
} 

Eine Antwort auf eine similar question diesen ganzen Zahlen Ereigniscode wies darauf hin, so etwas wie sein wird;

100 = play 
101 = pause 
103 = single mic click 
104 = double mic click 
105 = triple mic click 
etc ...