Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.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
Ios 检测用户何时中断UIScrollView动画_Ios_Objective C_Xcode_Uiscrollview - Fatal编程技术网

Ios 检测用户何时中断UIScrollView动画

Ios 检测用户何时中断UIScrollView动画,ios,objective-c,xcode,uiscrollview,Ios,Objective C,Xcode,Uiscrollview,我有一个水平滚动uiscrollview的应用程序,它并排显示3个子视图。我使用的是Objective C 当用户拖动并释放时,代码会检测最近的子视图,并自动滚动到3个子视图中最近的子视图,使其完全居中 这一切都很好,除了 当scrollview为自动居中移动设置动画时,用户只需点击(而不是拖动)即可中断 单击此按钮将停止动画和滚动视图,使其不在3个子视图的任何一个子视图上居中 我发现没有代理方法可以检测动画何时中断,然后继续居中 如何执行此操作?当您使用setContentOffset:a

我有一个水平滚动uiscrollview的应用程序,它并排显示3个子视图。我使用的是Objective C

当用户拖动并释放时,代码会检测最近的子视图,并自动滚动到3个子视图中最近的子视图,使其完全居中

这一切都很好,除了

  • 当scrollview为自动居中移动设置动画时,用户只需点击(而不是拖动)即可中断

  • 单击此按钮将停止动画和滚动视图,使其不在3个子视图的任何一个子视图上居中

  • 我发现没有代理方法可以检测动画何时中断,然后继续居中


如何执行此操作?

当您使用
setContentOffset:animated:
scrollToRectVisible:animated:
启动滚动动画时,其结束将由
UIScrollViewDelegate
方法
ScrollViewDiEndScrollingAnimation:
标记。如果在调用另一个委托方法之前,例如
ScrollViewWillBeginDraging:
ScrollViewDiEndDecreating:
-这意味着用户通过拖动(或轻触)中断了动画

您要做的是在用户停止拖动时重新启动动画-在
ScrollViewDiEndDraging:WillDecreate:
ScrollViewDiEndDecreating:

再次感谢mag_zbc

这确实帮助我找到了解决办法

我将动画过度复杂化,在用户完成拖动后以及动画完成时检查当前位置

为了解决这个问题,我只检查了
ScrollViewDiEndDecreating:
中的当前偏移量:

-如果最终偏移是三个正确位置之一(自动偏移不间断完成),则不执行任何操作


-如果偏移不是正确的位置之一(动画被中断),则再次移动。

也许您可以检测到轻触,或者当触摸结束时,然后重新启动定心动画?谢谢Picciano。检测水龙头的最佳方法是什么?它会干扰子视图的用户交互吗?谢谢mag_zbc!问题是,
ScrollViewWillBeginDraging:
不会只点击一下就跳闸。它仅通过拖动动作触发。