【问题标题】:Stop a UITableView from automatically scrolling阻止 UITableView 自动滚动
【发布时间】:2016-02-19 10:01:12
【问题描述】:

我有一个使用setContentOffset 自动滚动的 UITableView。像这样:

 CGFloat point = self.table.tblMinutes.contentSize.height - self.table.tblMinutes.bounds.size.height;

    [self.table.tblMinutes setContentOffset:CGPointMake(0, point) animated:false];
    [self.table.tblMinutes layoutIfNeeded];

    [UIView animateWithDuration:20.0 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
        [self.table.tblMinutes setContentOffset:CGPointMake(0, point - 500) animated:false];
    } completion:nil];

我想要实现的是滚动平稳地减速和停止。我无法做到这一点。

调用[self.table.tblMinutes.layer removeAllAnimations] 会停止动画,但由于某种原因移动了 contentOffset,没有达到我想要的效果。

我尝试在动画中使用UIViewAnimationOptionBeginFromCurrentState 选项,但没有任何效果。

有什么建议吗?

【问题讨论】:

  • 你为什么不打电话给setContentOffset:animated:
  • @matt 我在 [UIView animateWithDuration] 块内调用它,带有 UIViewAnimationOptionBeginFromCurrentState 选项。什么都没有发生
  • 抱歉,我只是对您想要实现的目标感到困惑。平稳地减速和停止,这听起来像是自定义动画曲线,那为什么不是你所需要的呢?换句话说,我看不出你的两阶段线性加完成的意义。只需动画到您想要动画到的位置...?
  • @matt 我删除了线性+完成。这并不重要。基本上,减速发生在用户点击“通知”之后。
  • 啊。所以你的意思是,你在一个动画的中间,你想在它还在进行的时候突然改变它?

标签: ios uitableview uiscrollview ios-animations


【解决方案1】:

查看Kyle Truscott's excellent blog post 了解有关 UIScrollView 的信息。 UITableView 继承自 UIScrollView,所以理论上应该可以工作。

【讨论】:

  • 不,我不明白这有什么关系。这是手动滚动的,它是表格视图已经做的。
【解决方案2】:

这是中断现有动画并将其替换为不同动画的经典问题的一个子集。

这里的问题是,如果你仅仅删除现有的动画,你会跳到那个动画的结尾。

解决方案是在移除现有动画之前咨询表示层并将层设置到该位置。 现在您从中游开始,可以应用另一个动画。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-09-07
  • 2020-05-02
  • 2023-03-22
  • 2014-01-21
  • 1970-01-01
  • 1970-01-01
  • 2012-12-27
  • 1970-01-01
相关资源
最近更新 更多