1

私のアプリケーションでは、投稿付きのフィードがあります。各投稿は、のセルで表されUITableViewます。投稿には、既読または未読の2つの状態があります。各セルには、がありUIImageView、この状態に基づいて異なる画像を表示する必要があります。このimageViewの画像をテーブルコントローラーのtableView:cellForRowAtIndexPath:メソッドで設定しました。

また、テーブルをスクロールしながら細胞の視認性を確認し、細胞が見えるようになると状態が変化するので、アニメーションで細胞の画像を変化させます。ただし、このアニメーションは、セルを再利用すると正しく機能しません。最初に表示されるセルは適切にアニメーション化されますが、最初のセル以降のすべてのセルは、画面に表示されたときにすでに結果の画像を持っているため、アニメーションは実行されません。これが私がそれをしている方法です:

// 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;

}

セルを再利用するときに、どういうわけかこのアニメーションをリセットして再開する必要があることはわかっていますが、どのように正確に行うべきかわかりません。また、画像ではなくセルの背景色をアニメーション化しようとすると、再利用しても問題なく機能します。

4

1 に答える 1

4

UITableViewCell の prepareForReuse メソッドをオーバーライドして、アニメーションをキャンセルし、画像を元の状態にリセットすることもできます。

- (void)prepareForReuse{
    [super prepareForReuse];

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

また、必ず Quartz をインポートしてください。

#import <QuartzCore/QuartzCore.h>
于 2012-11-07T16:55:24.453 に答える