单元格中的UITableView动画导致平滑滚动中断

时间:2011-07-30 17:37:58

标签: objective-c uitableview animation

我有一个带有自定义UITableViewCells的UITableView。每个单元格异步加载图像并显示它,这一切都很好,表格视图完美滚动。

我现在已经为单元格图像添加了“淡入”动画,但这会破坏表格 滚动。当我轻弹时,一旦图像想要“淡入”,桌面视图的滚动动画就会停止。几乎就好像在单元格图像上新引入的“淡入”会中断滚动动画。

有没有办法绕过这个?是这种常见的行为,还是我设法做了一些非常奇怪的事情?

这是在异步加载图像(动画函数)后调用的回调函数。

-(void)imageReady:(UIImage *)image FromUrl:(NSString *)url
{
    [UIView animateWithDuration:0.3 animations:^
    {
        [self.imageThumbnail setImage:image];
        self.imageThumbnail.alpha = 1;
    }]; 

}

我在较早阶段将alpha设置为0。

所有帮助表示赞赏。

2 个答案:

答案 0 :(得分:5)

就我而言,它所需要的只是animateWithDuration调用中的“UIViewAnimationOptionAllowUserInteraction”选项。

[UIView animateWithDuration:0.3 delay:0.0 options:(UIViewAnimationOptionCurveLinear | UIViewAnimationOptionAllowUserInteraction) animations:^
        {
            self.imageThumbnail.alpha = 1;
        } completion:nil];

答案 1 :(得分:1)

由于UITableView来自UIScrollView,我会实施UIScrollViewDelegate方法,-scrollViewDidScroll:-scrollViewDidEndDecelerating:。另外,我会在您的课程中添加BOOL,例如shouldPerformAnimations

现在在-scrollViewDidScroll,将shouldPerformAnimations设置为NO。或者将其设置为YES

中的-scrollViewDidEndDecelerating:

现在,您需要做的就是在shouldPerformAnimations中执行动画之前检查imageReady:fromURL:。我们的想法是,如果单元格滚动,则执行用户永远不会看到的动画是没有意义的。所以通过这样做我们只是等到表视图停止滚动,然后我们在所有可见单元格上执行动画。您可以使用-indexPathForVisibleRows上的UITableView方法获取可见单元格的索引路径数组。