4

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

Apple 文档指出滚动视图速度的单位是,我猜这将是每秒(pts/s),例如 UIScrollView Delegate 方法- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset

因此,我假设滚动视图减速度的单位是每秒点数(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.contentOffset.y 滚动视图完成减速
  • 手指一抬起,初始速度 = velocity.y
  • 最终速度 = 0 因为让滚动视图滚动直到它自然停止
  • 手指一抬起,Deceleration = scrollView.decelerationRate
  • 已用时间 = 从手指抬起到滚动视图停止之间的时间
4

2 回答 2

4

对您而言,最重要的委托方法可能是scrollViewDidScroll:,因为您只是一遍又一遍地不断收到该消息,包括在减速期间。监控正在发生的事情对你来说比试图提前计算更有用。没有有用的“滚动视图的减速单位” - 也就是说,您没有任何信息可以让您提前计算减速期间每个时刻的速度。但是,scrollViewWillEndDragging:withVelocity:targetContentOffset:告诉你现在的速度和当速度为零时滚动视图的偏移量,你可以现在要求偏移量,这样你就可以决定当前偏移量和最终偏移量之间的偏移量,并监控滚动的剩余部分,在scrollViewDidScroll:,以了解何时通过该偏移量。当然,您可以在每次scrollViewDidScroll:调用时获取时间戳,因此有了它和瞬时偏移量,以及所有先前调用的记录,presto,就有了瞬时速度。

于 2013-04-22T20:43:32.203 回答
0

速度单位UIScrollView是测量的,pt/ms同时速度单位是UIPanGestureRecognizer测量的pt/s

于 2020-10-19T07:04:45.860 回答