UIScrollView减速率和速度的单位/尺寸?

时间:2013-04-22 19:41:29

标签: objective-c cocoa-touch uiscrollview uiscrollviewdelegate

我试图在用户抬起他/她的手指后获得滚动UIScrollView的速度,以便当滚动视图的速度降至阈值速度以下时我可以触发事件。

Apple文档指出,滚动视图的速度单位是,我猜这将是每秒(pts / s),例如,对于UIScrollView Delegate方法{ {1}}。

因此我假设滚动视图减速的单位为每秒每秒点数(pts / s ^ 2)情况似乎并非如此。

以下是从方法- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset拉出的平移手势事件结束后(即,只要抬起手指)从滚动滚动视图中拉出的一些示例参数:

(初始偏移,目标偏移,初始速度,最终速度,减速度,经过时间)=

  • (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
  • 手指抬起时的初始速度=速度
  • 最终速度= 0因为让滚动视图滚动直到它自然停止
  • 一旦手指抬起,减速度= scrollView.decelerationRate
  • 经过的时间=手指抬起和滚动视图停止之间的时间

2 个答案:

答案 0 :(得分:4)

用于您目的的最重要的委托方法可能是scrollViewDidScroll:,因为您只是不断地一遍又一遍地发送该消息,包括在减速期间。监测正在发生的事情比预先计算更有用。没有有用的“单位用于滚动视图的减速” - 也就是说,您没有任何信息可以让您在减速期间的每个时刻提前计算速度。但是,scrollViewWillEndDragging:withVelocity:targetContentOffset:告诉您现在的速度以及当速度为零时滚动视图将具有的偏移量,并且您现在可以请求偏移量,因此您可以决定当前偏移量与最终偏移量之间的偏移量偏移,并在scrollViewDidScroll:中监视滚动的剩余部分,以了解何时传递该偏移量。当然,每次调用scrollViewDidScroll:时你都可以获取一个时间戳,因此,使用它和瞬时偏移量,以及之前所有呼叫的记录,都是你的瞬时速度。

答案 1 :(得分:0)

UIScrollView的速度单位以pt/ms度量,而UIPanGestureRecognizer的速度单位以pt/s度量