【问题标题】:Detect when a user interrupted UIScrollView animation检测用户何时中断 UIScrollView 动画
【发布时间】:2018-05-22 19:23:30
【问题描述】:

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

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

这一切都很好,除了;

  • 当滚动视图动画自动居中移动时,用户只需点击它(而不是拖动)即可中断。

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

  • 我发现没有任何委托方法可以检测到动画何时中断然后继续居中。

我该怎么做?

【问题讨论】:

  • 也许你可以检测到点击,或者当触摸结束,然后重新开始居中动画?
  • 感谢皮恰诺。检测水龙头的最佳方法是什么?它会干扰子视图的用户交互吗?

标签: ios objective-c xcode uiscrollview


【解决方案1】:

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

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

【讨论】:

  • 感谢 mag_zbc!问题是,scrollViewWillbeginDragging: 不会仅仅轻轻一按就跳闸。它仅通过拖动动作触发。
【解决方案2】:

再次感谢 mag_zbc!

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

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

为了解决它,我刚刚检查了scrollViewDidEndDecelerating:中的当前偏移量:

-如果最终偏移是三个正确位置之一(自动偏移完成不间断),则什么也不做。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-09
    • 2011-08-14
    • 1970-01-01
    • 2010-11-02
    • 2020-11-01
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多