2015-10-14 7 views
13

私は自分のアプリ内で異なるアクションをトリガーしようとしています。しかし、私がMPRemoteCommandCenterまたはremoteControlReceivedWithEvent代理人を使用しても、私は顕著な遅れのイベントを受け取ります。問題を悪化させるのは、私がダブルボタンを速く押してみると、ただ1つしか得られないということです。UIEventTypeRemoteControliphoneのヘッドセットボタンを押したときの待ち時間

誰もが同様の問題を経験していますか、これの理由を知っているか、さらにいくつかの回避策を知っていますか? ios8とios9の下でテストされています。

+0

多くのプラットフォームでダブルプレスアクションは、単一のユーザーイベントとして処理されます。 UIEventTypeRemoteControlには、ボタンが何回押されたかを示すプロパティが含まれていますか? –

+0

どんな種類の時間遅れ「遅れ」が得られますか?半分と1秒との間?数秒?サンプルプロジェクトや再現可能なテストケースを提供していただけますか? – JAL

答えて

1

クイックダブルプレスは、実際には単一のユーザーアクションです。これは、入力用のヘッドセットコントロールを使用するほぼすべてのアプリケーションで望ましい動作です。開発者は、受信した制御イベントをデバウンス、キュー、解析する必要がありません。これはGood Thing(tm)です!

この機能を有効にするには、ユーザーの入力を待っている間、システムはわずかな遅延を導入します。これが完了するまで数百ミリ秒かかるだけです。その後、あなたのコードでイベントを受け取ります。

ダブルプレスの検出、長い痛みを伴うが、できれば有用な例:

  1. ユーザー
  2. システム通知プレスヘッドセットの制御に押下は、リリースを待つ
  3. ユーザリリースヘッドセット制御
  4. システム通知リリース、時間ボタンが押されたことを検出(長押しと短押し)し、シングルプレスイベントを待ちます。
  5. ダブルプレスの場合、システムは200ms待機します
  6. です!ユーザは、ヘッドセットの制御
  7. システム通知プレス上押下解除
  8. ユーザリリースヘッドセット制御
  9. システムは、それが三重場合に
  10. システムは、200msの待機ダブルプレスイベントにキューに入れられた単一のプレスイベントに変換するのを待ちます200msの
  11. - プレスユーザー入力システムは、二重のプレスイベントが発生し、

は遅延がどのように参照キューをクリアシングル/ダブル/トリプルプレス検出に必要です。

イベントがアプリケーションに到達すると、それは行ったユーザーをクリックしてどのタイプの説明サブタイプがあります:similar question

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

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

答えは、これらのイベントコードの整数のようなものになります指摘しました。

100 = play 
101 = pause 
103 = single mic click 
104 = double mic click 
105 = triple mic click 
etc ... 
関連する問題