【发布时间】:2013-04-15 20:13:40
【问题描述】:
我试图在用户抬起手指后获取滚动 UIScrollView 的速度,以便在滚动视图的速度降至阈值速度以下时触发事件。
Apple 文档指出,滚动视图的速度单位为 points,我猜这将是每秒 (pts/s),例如,对于 UIScrollView Delegate 方法 - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset。
因此我会假设滚动视图的减速单位是points per second per second (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 手指一抬起
- 经过的时间 = 从手指抬起到滚动视图停止之间的时间
【问题讨论】:
-
我无法真正回答这个问题,但我有两点意见:1)速度不可能以 pts/s 为单位。如果是这种情况,即使完全没有减速(每秒 4.6 点非常慢),从初始偏移到目标的第一次测量需要 8 多分钟 . 2)
decelerationRate属性永远不会响应手势而改变,如果你没有在某个时候明确设置它,它将始终是常量UIScrollViewDecelerationRateNormal(0.998),就像在你所有的测量中一样。跨度>
标签: objective-c cocoa-touch uiscrollview uiscrollviewdelegate