ios – 在iPhone上按耳机按钮时的延迟

前端之家收集整理的这篇文章主要介绍了ios – 在iPhone上按耳机按钮时的延迟前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图触发不同的动作,只有我自己的应用程序使用插头耳机的按钮(类似于什么压力).但是我注意到,无论我是否使用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 ...

猜你在找的iOS相关文章