2011-07-30 53 views
1

我有一个带有自定义UITableViewCells的UITableView。每个单元格异步加载图像并显示它,这一切都正常工作,表格视图完美滚动。单元格中的UITableView动画导致平滑滚动打破

我已经添加了一个“淡入”动画到单元格图像,但这打破了滚动表 滚动。当我轻弹时,只要图像想要“淡入”,tableview的滚动动画就会停止。几乎就像新引入的单元格图像中的“淡入”会中断滚动动画。

有什么办法可以绕过这个吗?这是常见的行为,还是我设法做了一些非常奇怪的事情?

这里是回调函数,一旦图像完成异步加载(动画函数)就会被调用。

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

} 

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

所有帮助表示赞赏。

回答

5

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

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

哇,它会让我永远把我弄明白。看起来这个选项在iOS 4中默认是禁用的,但在iOS 5中默认启用。 –

1

由于UITableViewUIScrollView下降,我会实施UIScrollViewDelegate方法,-scrollViewDidScroll:-scrollViewDidEndDecelerating:。另外,我会为你的班级添加一个BOOL,比如shouldPerformAnimations

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

现在,所有你需要做的就是检查shouldPerformAnimationsimageReady:fromURL:执行动画前。这个想法是,如果单元格正在滚动,执行用户永远不会看到的动画是毫无意义的。因此,通过这样做,我们只需等待表视图停止滚动,然后我们对所有可见单元格执行动画。您可以通过UITableView上的-indexPathForVisibleRows方法获得可见单元格的索引路径数组。