ImageViews を含むセルを持つ UICollectionView があります。セルに表示したい画像をダウンロードした後、セル内に既にあるプレースホルダー画像で画像をクロスディゾルブしたいと思います。
すべてが期待どおりに機能しますが、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
Demo-App を実行し、右上のリロード ボタンを押すと、ランダムな他の画像から画像がフェードしていることがわかります。フェードはまた同じ画像の間にあると思います...そして、self.imageView.image = nil;
どういうわけか無視されますか?!?!