我有一个带水平滚动uiscrollview的应用程序,它并排显示3个子视图。我正在使用Objective C。
当用户拖动和释放时,代码会检测哪个是最近的子视图,并自动滚动到3个子视图中最近的子视图,使其完全居中。
这一切都很好,除了;
当滚动视图为自动居中移动设置动画时,用户可以通过点击它来中断(而不是拖动)。
此单击会暂停动画和滚动视图,使其不会居中于3个子视图中的任何一个。
我找到的代理方法无法检测动画何时中断,然后继续居中。
我该怎么做?
答案 0 :(得分:0)
当您使用setContentOffset:animated:
或scrollToRectVisible:animated:
开始滚动动画时,其结尾将以UIScrollViewDelegate
方法scrollViewDidEndScrollingAnimation:
标记。如果之前调用了其他委托方法,例如scrollViewWillBeginDragging:
或scrollViewDidEndDecelerating:
- 这意味着用户通过拖动(或点按)来中断您的动画片。
您想要做的是在用户停止拖动时重新启动动画 - 在scrollViewDidEndDragging:willDecelerate:
或scrollViewDidEndDecelerating:
答案 1 :(得分:0)
再次感谢mag_zbc!
这确实帮助我找到了解决方案。
我过度复杂化动画,在用户完成拖动以及动画完成后检查当前位置。
为了解决这个问题,我刚刚检查了scrollViewDidEndDecelerating:
:
- 如果最终偏移是三个正确位置之一(自动偏移完成不间断),则不执行任何操作。
- 如果偏移量不是正确位置之一(动画被中断),则再次移动。