停止 UITableView 自动滚动

Stop a UITableView from automatically scrolling

我有一个使用 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 选项,但没有任何作用。

有什么建议吗?

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

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

这里的问题是,如果您只是删除现有动画,您将跳到该动画的末尾。

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