2015-10-14 4 views
13

Я пытаюсь инициировать различные действия внутри только моего собственного приложения, используя кнопки подключенной гарнитуры (что-то похожее на то, что делает нажатие). Однако я заметил, что независимо от того, использую ли я делегат MPRemoteCommandCenter или remoteControlReceivedWithEvent, я получаю события с заметным запаздыванием. Что еще хуже, так это то, что если я попытаюсь дважды нажать кнопку быстрого, я получу только один UIEventTypeRemoteControl.задержка при нажатии кнопки гарнитуры в iphone

Кто-нибудь сталкивается с подобной проблемой, знает причину этого или даже лучше знает обходное решение? Протестировано под ios8 и ios9.

+0

Действия с двойным нажатием на многих платформах обрабатываются как однопользовательское событие. Имеет ли UIEventTypeRemoteControl какие-либо свойства, указывающие, сколько раз была нажата кнопка? –

+0

Какая временная задержка «лаг» вы получаете? Между полсекунды и секунды? Несколько секунд? Можете ли вы предоставить образец проекта или воспроизводимый тестовый пример? – JAL

ответ

1

Быстрое двойное нажатие действительно представляет собой одно действие пользователя, так как это желаемое поведение практически в любом приложении, которое использует управление гарнитурой для ввода. Это экономит разработчикам, которые вынуждены дебютировать, ставить в очередь и анализировать входящие события управления вручную и это хорошая вещь (tm)!

Для этого система будет вводить небольшое количество задержек, ожидая дальнейшего ввода пользователем. Для этого потребуется всего несколько сотен миллисекунд, после чего вы получите событие в своем коде.

Долгий, мучительный, но, надеюсь, полезный пример двойного пресс обнаружения:

  1. Пользователь нажимает на контроле гарнитуры
  2. Системы уведомление пресса, ждет освобождения
  3. пользователя управление релизы гарнитуры
  4. Системные уведомления освобождены, кнопка времени остается нажатой (длительное нажатие и короткое нажатие) и событие однократного нажатия очереди
  5. Система ждет 200 мс в случае, если это двойной пресс
  6. Это! Пользователь нажимает на контроле гарнитуры
  7. системы замечает прессу, ждет освобождения
  8. управление пользователем отпускает гарнитуры
  9. Системы преобразует в очереди одной пресс-конференции в двойную пресс-конференцию
  10. система ожидает 200мс в случае тройной -Нажмите
  11. нет пользовательский ввод в 200мсе
  12. системы не срабатывает дважды нажмите событие и очищает очередь

посмотреть, как задержка необходимо для обнаружения одиночных/двойных/тройных нажатий.

Когда событие достигает приложения оно будет иметь подтип, который описывает, какой тип нажмите пользователь сделал:

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

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

Ответ на similar question через указал эти кодовые события целых чисел будет что-то подобное;

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

 Смежные вопросы

  • Нет связанных вопросов^_^