19

iOS アプリUISystemGestureGateGestureRecognizersの最上位にインストールされる標準は何ですか?UIView

私のアプリは 2 つのビューで構成されています。1 つは画面の上半分を埋め、もう 1 つはカスタム キーボードで下半分を埋めます。スペース バーのタップが常に機能するとは限らず、いくつかの調査の結果、下部 20 ピクセル程度のタップ イベントのタイミングがビューの残りの部分と異なることがわかりました。ほとんどのビューでは、touchesBegan/Ended の間の期間は約 100 ミリ秒でしたが、スペース バーについては 1 ~ 2 ミリ秒でした。(私のアプリはエミュレーターであり、これは速すぎてキーの押下を検出できません)。

さらに掘り下げた後UIView、アプリケーションのメイン(つまり、メインビューのスーパービュー)に 2 がUISystemGestureGateGestureRecognizerインストールされていることがわかりました。画面の下部にあるそれらを削除するとViewDidAppear、影響を受けなくなります。(おそらく、これらはキーボードへのタッチプレスイベントをキャンセルしているため、タイミングが速くなります)。

これらのシステム レコグナイザーは、少なくとも iOS 5 から 7 および iPad と iPhone の両方に存在します。上/下からのスワイプに関連している可能性があると思いましたが、この機能はそれらを削除しても機能します。

だから私は修正しましたが、ここで何が起こっているのか、特にこれらを削除することで何が壊れているのかをもっと理解したいと思います.

4

2 に答える 2

16

この遅れたタッチも私を悩ませました。前に言ったことへの追加として、ここに簡単な修正があります:

override func viewDidAppear(_ animated: Bool) {
    let window = view.window!
    let gr0 = window.gestureRecognizers![0] as UIGestureRecognizer
    let gr1 = window.gestureRecognizers![1] as UIGestureRecognizer
    gr0.delaysTouchesBegan = false
    gr1.delaysTouchesBegan = false
}

これらのジェスチャ レコグナイザーを削除する必要はありません。これをメインのView Controllerに追加するだけです。

于 2014-11-28T12:35:02.087 に答える