检测用户何时中断UIScrollView动画

时间:2018-05-22 19:23:31

标签: ios objective-c xcode uiscrollview

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

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

这一切都很好,除了;

  • 当滚动视图为自动居中移动设置动画时,用户可以通过点击它来中断(而不是拖动)。

  • 此单击会暂停动画和滚动视图,使其不会居中于3个子视图中的任何一个。

  • 我找到的代理方法无法检测动画何时中断,然后继续居中。

我该怎么做?

2 个答案:

答案 0 :(得分:0)

当您使用setContentOffset:animated:scrollToRectVisible:animated:开始滚动动画时,其结尾将以UIScrollViewDelegate方法scrollViewDidEndScrollingAnimation:标记。如果之前调用了其他委托方法,例如scrollViewWillBeginDragging:scrollViewDidEndDecelerating: - 这意味着用户通过拖动(或点按)来中断您的动画片。

您想要做的是在用户停止拖动时重新启动动画 - 在scrollViewDidEndDragging:willDecelerate:scrollViewDidEndDecelerating:

答案 1 :(得分:0)

再次感谢mag_zbc!

这确实帮助我找到了解决方案。

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

为了解决这个问题,我刚刚检查了scrollViewDidEndDecelerating:

中的当前偏移量

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

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