2015-10-14 41 views
13

我試圖觸發不同的行動,只有我自己的應用程序使用插入耳機的按鈕(類似pressy做的事情)。不過,我注意到,無論我使用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. 200ms的
  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 ...