在UITableViewCell或UICollectionViewCell中交叉解析UIImage

时间:2014-02-25 13:02:58

标签: ios core-animation calayer uiviewanimationtransition catransition

我有一个UICollectionView,其中包含包含ImageViews的Cell。下载了我要在单元格中显示的图像后,我想将图像与已经在单元格内的占位符图像交叉溶解。

一切都按预期工作,但随着我开始重用CollectionViews,我开始看到奇怪的东西。

  • 我的占位符图片(没有动画完成)的设置将被忽略。
  • 在重新加载集合/表格视图之后,它正在淡出的图像是最后一个可见的图像(在另一个单元格中)。

我目前正在使用以下代码执行此操作:

weakSelf.image = placeholderImage;
[UIView transitionWithView:weakSelf
                  duration:5.0f
                   options:UIViewAnimationOptionTransitionCrossDissolve
                animations:^{
                     weakSelf.image = image;
              } completion:nil];

但如果我这样做就没有区别......

weakSelf.image = placeholderImage;
CATransition  *transition = [CATransition animation];
[transition setType:kCATransitionFade];
transition.duration = 5.0;
[weakSelf.layer addAnimation:transition
                      forKey:@"fade"];
weakSelf.image = image;

这是UIViews presentationLayer的一些缓存问题吗? 有什么办法让我在UICollectionViews或UITableViews中淡入淡出?

修改

我上传了一个展示问题的小样本项目...... https://dl.dropboxusercontent.com/u/809469/ImageTransition.zip

如果您运行演示应用程序并点击右上角的重新加载按钮,您可以看到图像正在从一些随机的其他图像中淡出。我认为淡入淡出会再次出现在同一个图像之间......而self.imageView.image = nil;也会被忽略?!?!

1 个答案:

答案 0 :(得分:0)

您可以像这样使用[UIView animateWithDuration:]并避免所有复杂性:

weakSelf.image = placeholderImage;
[UIView animateWithDuration:5.0f animations:^{
    weakSelf.alpha=0.0f;

} completion:^(BOOL finished) {
    weakSelf.image = image;
    [UIView animateWithDuration:5.0f animations:^{
        weakSelf.alpha=1.0f;

    }];
}];

不要忘记在 weakSelf.alpha=1.0f;

中设置weakSelf.image = placeholderImage;prepareForReuse: