检测用户何时中断 UIScrollView 动画
Posted
技术标签:
【中文标题】检测用户何时中断 UIScrollView 动画【英文标题】:Detect when a user interrupted UIScrollView animation 【发布时间】:2018-05-22 19:23:30 【问题描述】:我有一个带有水平滚动 uiscrollview 的应用程序,它并排显示 3 个子视图。我正在使用目标 C。
当用户拖动和释放时,代码会检测哪个是最近的子视图,并自动滚动到 3 个子视图中最近的一个,使其完全居中。
这一切都很好,除了;
当滚动视图动画自动居中移动时,用户只需点击它(而不是拖动)即可中断。
单击此按钮可停止动画和滚动视图,使其不在 3 个子视图中的任何一个上居中。
我发现没有任何委托方法可以检测到动画何时中断然后继续居中。
我该怎么做?
【问题讨论】:
也许你可以检测到点击,或者当触摸结束,然后重新开始居中动画? 感谢皮恰诺。检测水龙头的最佳方法是什么?它会干扰子视图的用户交互吗? 【参考方案1】:当您使用setContentOffset:animated:
或scrollToRectVisible:animated:
启动滚动动画时,其结束将由UIScrollViewDelegate
方法scrollViewDidEndScrollingAnimation:
标记。如果在调用其他委托方法之前,例如 scrollViewWillBeginDragging:
或 scrollViewDidEndDecelerating:
- 这意味着用户通过拖动(或点击)中断了您的动画。
您要做的是在用户停止拖动时重新启动动画 - 在 scrollViewDidEndDragging:willDecelerate:
或 scrollViewDidEndDecelerating:
【讨论】:
感谢 mag_zbc!问题是,scrollViewWillbeginDragging:
不会仅仅轻轻一按就跳闸。它仅通过拖动动作触发。【参考方案2】:
再次感谢 mag_zbc!
这确实帮助我找到了解决方案。
我使动画过于复杂,在用户完成拖动后以及动画完成时检查当前位置。
为了解决它,我刚刚检查了scrollViewDidEndDecelerating:
中的当前偏移量:
-如果最终偏移是三个正确位置之一(自动偏移完成不间断),则什么也不做。
-如果偏移不是正确的位置之一(动画被中断),则再次移动。
【讨论】:
以上是关于检测用户何时中断 UIScrollView 动画的主要内容,如果未能解决你的问题,请参考以下文章