Objective c UIScrollView减速率和速度的单位/尺寸?
我尝试在用户抬起手指后获取滚动UIScrollView的速度,以便在滚动视图的速度下降到阈值速度以下时触发事件 苹果的文档说明scrollview的速度单位为点,我猜应该是每秒(pts/s),例如,对于UIScrollView委托方法Objective c UIScrollView减速率和速度的单位/尺寸?,objective-c,cocoa-touch,uiscrollview,uiscrollviewdelegate,Objective C,Cocoa Touch,Uiscrollview,Uiscrollviewdelegate,我尝试在用户抬起手指后获取滚动UIScrollView的速度,以便在滚动视图的速度下降到阈值速度以下时触发事件 苹果的文档说明scrollview的速度单位为点,我猜应该是每秒(pts/s),例如,对于UIScrollView委托方法-(void)ScrollViewWillendDraging:(UIScrollView*)scrollview with velocity:(CGPoint)velocity targetContentOffset:(inout CGPoint*)targetC
-(void)ScrollViewWillendDraging:(UIScrollView*)scrollview with velocity:(CGPoint)velocity targetContentOffset:(inout CGPoint*)targetContentOffset
因此,我假设scrollview的减速单位为每秒点(pts/s^2),但情况似乎并非如此。
下面是从方法-(void)ScrollViewWillendDraging:(UIScrollView*)使用速度的scrollView:(CGPoint)velocity targetContentOffset:(inout CGPoint*)targetContentOffset
和-(void)中提取的平移手势事件结束时(即,只要您抬起手指)从滚动滚动滚动视图中提取的一些示例参数ScrollViewDiEndDecelling:(UIScrollView*)scrollView
:
(初始偏移、目标偏移、初始速度、最终速度、减速、经过时间)=
- (364.02664.5,4.619940,0,0.998,3.068916)
- (2595.53288.5,1.398724,0,0.998,2.485449)
- (3094.51907.0,-2.389578,0,0.998,2.752163)
- (143.01275.5,2.279252,0,0.998,2.718653)
- 初始偏移=提起手指后立即滚动查看.contentOffset.y
- 目标偏移量=targetContentOffset->y只要抬起手指或scrollView.contentOffset.y当scrollView完成减速时
- 初始速度=手指一抬起,速度y
- 最终速度=0,因为让scrollview滚动直到它自然停止
- 减速=滚动视图。手指一抬起,减速率
- 已用时间=手指抬起和scrollview停止之间的时间
scrollViewDidScroll:
,因为您只是不断地收到一次又一次的消息,包括在减速过程中。对你来说,监视正在发生的事情比预先计算更有用处。没有有用的“滚动视图减速单位”-也就是说,您没有任何信息可以让您提前计算减速过程中每一时刻的速度。但是,ScrollViewWillendDraging:withVelocity:targetContentOffset:
告诉您当前速度和速度为零时滚动视图将具有的偏移量,您可以立即请求偏移量,以便确定当前偏移量和最终偏移量之间的偏移量,并在scrollViewDidScroll:
中监视滚动的其余部分,以了解何时通过该偏移量。当然,您可以在每次调用scrollViewDidScroll:
时获取时间戳,因此使用该时间戳和瞬时偏移量,以及以前所有调用的记录,presto,这是你的瞬时速度。UIScrollView的速度单位是在pt/ms
中测量的,而UIPanGestureRecognizer的速度单位是在pt/s
中测量的,我不能真正回答这个问题,但我有两点意见:1)速度不可能在pts/s中。如果是这样的话,在第一次测量中,从初始偏移量到目标需要8分钟以上,即使根本没有减速(每秒4.6点非常慢)。2) decelerationRate
属性永远不会随着手势而改变,如果您在某个时候没有明确设置它,它将始终是常量UIScrollViewDecelerationRateNormal
(0.998
),就像在所有测量中一样。谢谢!此外,结果表明,速度(很明显)不是每秒点数,而是每次迭代点数。所发生的情况是,每X秒scrollview将前进Y个点,而X秒后它将前进Y*Z个像素,其中Z=scrollview.decelerationRate
,Y=“velocity”(如通过ScrollViewWillendDraging:withVelocity:targetContentOffset:
)和X=1/(每秒迭代次数)。这将一直持续到scrollview停止为止。@KenHaggerty非常有用。谢谢你弄明白了!IRC!irc.freenode.net#iphonedev。你只需要忍受咆哮和别人说你愚蠢、一文不值,但最终你会得到答案。@KenHaggerty这很有趣,因为头文件的注释说速度是点/秒。考虑到我观察到的数字的大小,我看不出点/秒有什么意义,所以我倾向于相信你的解释,并假设评论是错误的。@KenHaggerty你所说的“每秒迭代次数”是什么意思?另外,点和像素之间的区别是故意的吗?