0

デスクトップアプリにページがあり、簡単なグラブアンドパンを実装しました。それは素晴らしい働きをします。

この方法でパンしているときにリリースすると、ページをドロップした場所でページが停止します。

少し勢いをつけて少し続けて、やがてやめてほしいです。iPhone UIの「スロー」のように、私は推測します。

私は本当に完璧を追いかけているのではなく、そのページを「投げる」ことができるという非常に大雑把な単純な感覚です。

4

2 に答える 2

3

その位置に加えて、ページの現在の速度を追跡するだけです。ユーザーが離したら、最後にパンした量に速度を設定します。次に、後続のフレームで、現在の速度でパンを続行し、ゼロに達するまで現在の速度を一定量 (大きさで) 減少させます。

于 2008-09-23T18:25:34.587 に答える
3

位置を追跡することで、移動の速度を計算できます。精度の欠如と平滑化の理由から、最後の複数の位置を平均して、それらが互いにほぼ均等な時間枠で取得されたと仮定する必要があります。

これらの平均値を取得したら、効果をどの程度表示したいかに従ってベロシティを調整できます。平均を計算したら、定数乗数を平均に追加するだけです。

ここから、この速度でウィンドウを移動し、速度が 0 になるまで速度を下げます。速度の低下率も、個人の好みによって異なります。ウィンドウをより長い期間移動させたい場合は、速く停止させたい場合よりも速度を遅くします。

「バウンス」効果が必要な場合は、ウィンドウが画面の端にぶつかったときを確認するだけです。左または右にヒットした場合 (つまり、WindowX <= 0 または WindowX + WindowWidth >= ScreenWidth)、X 速度に -1 を掛けて反対方向に送信します。Y軸も同様です。「バウンス」効果を追加しない場合は、少なくとも同じチェックを行うことをお勧めしますが、画面の端に当たると、強制的に画面に戻します (つまり、WindowX >= 0 および WindowX <= ScreenWidth - WindowWidth) は速度を 0 に設定し、アニメーションを完全に停止します。

また、最大速度に上限を追加することをお勧めします (つまり、-x と x 単位の間)。これにより、「何か」が発生して速度が非常識な数値になり、画面が時速 100 万マイルで跳ね返るという奇妙なケースが回避されます。

于 2008-09-28T21:35:42.797 に答える