すべてのフレーバーの UIGestureRecognizers を広範囲に使用する iPad アプリがあります。一般的に、私は大ファンです。UIPinchGestureRecognizer には、非常に具体的な問題が 1 つあります。
ユーザーがピンチ ジェスチャを行うシナリオを考えてみましょう。次に、1 本の指をまったく動かさずに、もう 1 本の指を取り外して別の場所に置き、ピンチを続けます。(思ったほど不可能ではありません)。
私の問題は、UIGestureRecognizer が一般的に、指が画面から離れたときに認識できず、何らかのアクションをトリガーできないことに特にあるようです。他の場所 (touchesBegan と touchesEnded) でもこれに気付きましたが、ハックすることができました。今回ではない。
アクションが UIGestureRecognizer にどのように見えるかを次に示します。
- ピンチが始まると、UIGestureRecognizerStateBegan。
- n UIGestureRecognizerStateChangeds、ピンチが変化します。
- ユーザーが指を 離すと気まずい沈黙。
- ユーザーが指を入れ替えると、おそらく遠く離れた場所で 気まずい沈黙。
- ピンチが再開すると、別の UIGestureRecognizerStateChanged。5.
ここで、ステップ 5 で問題が発生しました。ステップ 3 と 4 ではハンドラーで何も起きていないため、ハンドラーは 2 と 5 の UIGestureRecognizerStateChangeds から完全にシームレスに移行しますが、多くのことが発生しています。ハンドラーには、ハンドラー メッセージの間に反抗的な指が何百もの画面単位を移動する可能性があり、ユーザーが信じられないほど速くピンチしたように見えます。
ここで、ユーザーが実際にそれほど速くピンチすることが不可能な場合は、更新間の許容指位置デルタにしきい値を設定するだけで済みます。しかし、それは可能です。素早いピンチ ジェスチャでは、ユーザーの指が非常に長い距離を移動する可能性があります。問題のクライマックスはこれです。UIPinchGestureRecognizer が上記の奇妙な状況と素早いピンチ ジェスチャを区別できない。私はこれらを非常に異なる方法で処理する必要があり、今のところ違いを見分ける方法がまったくありません. 指が画面から離れたときに OS が教えてくれないのはなぜですか? これは静電容量式スクリーン ハードウェアの機能ですか、それとも OS のバグですか? それとも…意図的なデザイン…?