首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在重用的UITableViewCell中使用动画更改图像

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

Stack Overflow用户
提问于 2012-11-08 00:39:44
回答 1查看 2.2K关注 0票数 1

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

我还会在滚动表格时检查单元格的可见性,当单元格变为可见时,它的状态会发生变化,因此单元格的图像会随动画发生变化。然而,当单元被重用时,该动画不能正常工作。第一个可见的单元格被正确地动画,但是第一个单元格之后的所有单元格在它们出现在屏幕上时已经有了结果图像,不会为它们触发动画。我是这样做的:

代码语言:javascript
复制
// 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;

}

我意识到当我重用一个细胞时,我应该以某种方式重置这个动画,并重新启动它,但是我不知道我到底应该如何做。此外,如果我尝试动画单元格的背景颜色,而不是图像,它可以很好地重用。

EN

回答 1

Stack Overflow用户

发布于 2012-11-08 00:55:24

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

代码语言:javascript
复制
- (void)prepareForReuse{
    [super prepareForReuse];

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

还要确保导入quartz:

代码语言:javascript
复制
#import <QuartzCore/QuartzCore.h>
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13274143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档