我试图触发不同的动作,只有我自己的应用程序使用插头耳机的按钮(类似于什么压力).但是我注意到,无论我是否使用MPRemoteCommandCenter或remoteControlReceivedWithEvent委托,我都会收到一个明显滞后的事件.更糟糕的是,如果我尝试双击按钮快,我只会得到一个UIEventTypeRemoteControl.
有没有人遇到类似的问题,知道这个甚至更好的知道一些解决方法的原因?经ios8和ios9测试.
解决方法
快速双击确实是一个单一的用户操作,因为这是使用耳机控制输入的几乎所有应用程序中所需的行为.它节省了开发人员手动去抖动,排队和解析输入控制事件,是一件好事(tm)!
为了使其工作,系统将引入少量滞后,同时等待进一步的用户输入.它只需要几百毫秒才能完成,之后您将在代码中收到该事件.
一个长期,痛苦但有希望的双重检测的有用的例子:
>用户按下耳机控制
>系统通知按,等待发布
>用户释放耳机控制
>系统通知发布,检测时间按钮被按下(长按vs短按)并排队单击事件
>系统等待200ms,以备双击
这是!用户按下耳机控制
>系统通知按,等待发布
>用户释放耳机控制
>系统将排队的单击事件转换为双击事件
>系统等待200ms,万一它是三重按
> 200ms内无用户输入
>系统触发双击事件并清除队列
查看单/双/三次压力检测需要延迟.
当事件到达您的应用程序时,它将具有描述用户所做的点击类型的子类型:
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 ...