2015-10-14 13 views
13

Próbuję wyzwalać różne akcje wewnątrz tylko mojej własnej aplikacji za pomocą przycisków podłączonego zestawu słuchawkowego (coś podobnego, co robi pressy). Zauważyłem jednak, że niezależnie od tego, czy używam delegata MPRemoteCommandCenter czy remoteControlReceivedWithEvent, otrzymuję zdarzenia z zauważalnym opóźnieniem. Tym, co sprawia, że ​​jest jeszcze gorzej, jest to, że jeśli spróbuję szybko nacisnąć podwójnie, otrzymam tylko jedną: UIEventTypeRemoteControl.opóźnienie po naciśnięciu przycisku na zestawie słuchawkowym w iphone

Czy ktoś ma podobny problem, zna przyczynę tego problemu, a nawet lepiej zna jakieś obejście tego problemu? Testowany pod ios8 i ios9.

+0

Podwójne naciśnięcia na wielu platformach są traktowane jako zdarzenie pojedynczego użytkownika. Czy UIEventTypeRemoteControl zawiera jakieś właściwości wskazujące ile razy przycisk został naciśnięty? –

+0

Jakie opóźnienie "opóźnienie" dostajesz? Między pół sekundy i sekundy? Kilka sekund? Czy możesz podać przykładowy projekt lub powtarzalny przypadek testowy? – JAL

Odpowiedz

1

Szybkie podwójne naciśnięcie jest rzeczywiście działaniem pojedynczego użytkownika, ponieważ jest to pożądane zachowanie w prawie każdej aplikacji, która używa sterowania zestawem słuchawkowym do wprowadzania danych. To pozwala programistom na ręczne odrzucanie, kolejkowanie i analizowanie nadchodzących zdarzeń kontrolnych i jest dobrym pomysłem (tm)!

Aby to działało, system wprowadzi niewielką ilość opóźnienia, czekając na dalsze wprowadzanie danych przez użytkownika. Wypełnienie tego kodu powinno zająć kilkaset milisekund, po czym otrzymasz zdarzenie w swoim kodzie.

długa, bolesna, ale miejmy nadzieję, użyteczne przykładem podwójnej prasy wykrywania:

  1. Użytkownik naciska na kontroli słuchawkowego
  2. powiadomienia systemowe prasa, czeka na uwolnienie
  3. użytkownika kontrola komunikatów słuchawkowy
  4. Zwolnienie komunikatu systemowego, wykrycie, że przycisk czasu był wciśnięty (długie naciśnięcie względem krótkiego naciśnięcia) i kolejkowanie zdarzeń pojedynczego naciśnięcia
  5. System czeka 200 ms na wypadek dwukrotnego naciśnięcia
  6. To jest! Użytkownik naciska na kontroli słuchawkowego
  7. zawiadomień systemowe prasę, czeka na uwolnienie
  8. kontrola komunikatów użytkownik słuchawkowy
  9. system przelicza kolejce pojedynczego naciśnij zdarzenie w podwójnej prasowego imprezy
  10. System czeka 200ms w przypadku jest to potrójna -Press
  11. Nie wprowadzone przez użytkownika w ciągu 200ms
  12. systemu pożary dwukrotnie naciśnij zdarzenia i czyści kolejkę

zobaczyć jak opóźnienie niezbędne do wykrywania pojedynczej/podwójnej/potrójnej prasy.

Gdy zdarzenie osiąga swoją aplikację będzie miał podtyp który opisuje typ kliknij użytkownik wykonany:

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

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

Odpowiedź na ciągu similar question wskazał tych liczb kodu zdarzenia będzie coś takiego;

100 = play 
101 = pause 
103 = single mic click 
104 = double mic click 
105 = triple mic click 
etc ... 
Powiązane problemy