在重用的UITableViewCell中使用动画更改图像

时间:2012-11-07 16:39:44

标签: ios uitableview uiviewanimation reusability

在我的应用程序中,我有一个帖子的帖子。每个帖子由UITableView中的单元格表示。帖子有两种状态:读取或未读取。每个单元格都有UIImageView,必须根据此状态显示不同的图像。我在表格控制器的tableView:cellForRowAtIndexPath:方法中设置了此imageView的图像。

我还在滚动表格的同时检查单元格的可见性,并且当单元格变得可见时,它的状态被改变,因此单元格的图像随动画而改变。但是,当重复使用单元格时,此动画无法正常工作。第一个要变为可见的单元格是正确的动画,但是第一个单元格在第一个单元格出现在屏幕上之后已经生成了图像,动画不会为它们触发。以下是我的表现:

// This is called when a cell becomes visible
- (void)setIsVisible:(Boolean)isVisible
{

    if (isVisible)
    {         
        UIImage * toImage = [UIImage imageNamed:@"img-cell-read.png"];

        [UIView transitionWithView:self.myImageView
                          duration:2.0f
                           options:UIViewAnimationOptionTransitionCrossDissolve
                        animations:^{
                            self.myImageView.image = toImage;
                        } completion:NULL];
    }
_isVisible = isVisible;

}

我意识到我应该以某种方式重置这个动画并在我重复使用一个单元格时再次启动它,但我不明白我该怎么做。此外,如果我尝试为单元格的背景颜色而不是图像设置动画,则可以重复使用。

1 个答案:

答案 0 :(得分:4)

您可以覆盖UITableViewCell中的prepareForReuse方法以取消任何动画,并将图像重置为原始状态。

- (void)prepareForReuse{
    [super prepareForReuse];

    [self.myImageView.layer removeAllAnimations];
    self.myImageView.image = YOUR_INITIAL_UIIMAGE;
}

还要确保导入quartz:

#import <QuartzCore/QuartzCore.h>