2

ユーザーが画面に触れているが動いていないことを知りたい。touchesBegan と touchesEnded を使用するだけで、タッチの回数を知ることができますが、問題は touchesMoved だけがイベントを送信することです。移動していない場合、イベントは送信されません。これは、スライド スクロールを快適にするために使用されています。スクロールを放すと、指を離してもスクロールし続けますが、指を離しても動かないとすぐに停止します。touchesMoved で fingerDown ブール値を設定してから、ループ (スクロールとスライドが発生している場所) で false に設定することはできません。同期されていないためです。

基本的に、私は touchesNotMoved イベントを持つことをシミュレートしたい - あなたが動いているときはいつでも、特定のブール値は true であり、動いていないときは false です。

また、Apple のスクロールだけを使用していない理由を聞かないでください。この質問とは関係のない十分な理由があります。:-)

4

1 に答える 1

1

これは、タッチがアクティブでない場合を知るための答えではありません、とにかく、私がやりたかったことに対する合理的な解決策です.

したがって、他の誰かが Apple のスクロール ビューをシミュレートしようとしている場合 (ピクセル パーフェクトなスクロールと素敵なフリングとスライド)、次のものが必要になります。

タッチ数を追跡する整数。
タッチ イベントとは別のループまたはタイマー。
スクロールの「減衰」量を格納するベクトル (または 2 つの float)。
0.95 などの一定の float 減衰値。


- touchesBegan で、[touches count] だけ touchCount をインクリメントします。
- touchesEnded では、[touches count] だけ touchCount を減らします。
- touchesMoved で、currentTouchPos - previousTouchPos を表すベクトルを作成します。
- そのベクトルでビューをスクロールします。
- scrollDecay ベクトルをそのベクトルに等しく設定します。
- メイン タイマーまたはループで、 touchCount <= 0 の場合にのみ、scrollDecay だけビューをスクロールします。さらに、scrollLDecay ベクトルに減衰値を掛けます。非常に低い値 (0.1 など) に達したら、0 に設定します。

これで完了です。これは非常にうまく機能します。これと Apple のスクロールの間に識別可能な違いは見られません。

于 2009-09-08T01:46:13.630 に答える