Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c UIScrollView减速率和速度的单位/尺寸?_Objective C_Cocoa Touch_Uiscrollview_Uiscrollviewdelegate - Fatal编程技术网

Objective c 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

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

苹果的文档说明scrollview的速度单位为,我猜应该是每秒(pts/s),例如,对于UIScrollView委托方法
-(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你所说的“每秒迭代次数”是什么意思?另外,点和像素之间的区别是故意的吗?