4

スクロールビューの速度がしきい値速度を下回ったときにイベントをトリガーできるように、ユーザーが指を離した後にスクロール UIScrollView の速度を取得しようとしています。

Appleのドキュメントには、スクロールビューの速度の単位はポイントであると記載されており、UIScrollView Delegate method などの場合、1秒あたり(pts / s)になると思い- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffsetます。

したがって、スクロールビューの減速の単位は1 秒あたりのポイント (pts/s^2)なると思いますが、そうではないようです。

パン ジェスチャ イベントが終了するとすぐに (つまり、指を離すとすぐに)、メソッド- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffsetとからプルされたスクロール スクロール ビューからプルされたパラメータの例を次に示し- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollViewます。

(初期オフセット、目標オフセット、初期速度、最終速度、減速度、経過時間) =

  • (364.0、2664.5、4.619940、0、0.998、3.068916)
  • (2595.5、3288.5、1.398724、0、0.998、2.485449)
  • (3094.5、1907.0、-2.389578、0、0.998、2.752163)
  • (143.0、1275.5、2.279252、0、0.998、2.718653)

どこ:

  • 初期オフセット = scrollView.contentOffset.y 指を離すとすぐに
  • ターゲット オフセット = targetContentOffset->y 指を離すとすぐに、または scrollview の減速が完了すると scrollView.contentOffset.y
  • 指を離すとすぐに初速度 = 速度.y
  • スクロールビューを自然に停止するまでスクロールさせるため、最終速度 = 0
  • 減速 = scrollView.decelerationRate 指を離すとすぐに
  • 経過時間 = 指が離されてからスクロールビューが静止するまでの時間
4

2 に答える 2

4

あなたの目的にとって最も重要なデリゲート メソッドは、おそらくscrollViewDidScroll:です。何が起こっているかを監視することは、事前に計算しようとするよりも役に立ちます。有用な「スクロール ビューの減速の単位」はありません。つまり、減速中のあらゆる瞬間の速度を事前に計算できる情報がありません。ただし、現在の速度と、速度がゼロのときのスクロール ビューのオフセットを示します。現在のオフセットと最終的なオフセットの間のオフセットを決定し、監視することができます。スクロールの残りの部分で、scrollViewWillEndDragging:withVelocity:targetContentOffset:scrollViewDidScroll:、そのオフセットがいつ渡されるかを学習します。そしてもちろん、呼び出されるたびにタイムスタンプを取得できるscrollViewDidScroll:ので、それと瞬間的なオフセットを使用して、以前のすべての呼び出しの記録とともに、瞬間的な速度が得られます。

于 2013-04-22T20:43:32.203 に答える