1

私はUICollectionView自分のアプリに を持っています。そのセルは主に で構成されUIImageViewており、Core Image で操作されて彩度が低くなった画像を含んでいます。スクロール時のパフォーマンスはまったくひどいものです。私がそれをプロファイリングすると、費やされた時間の大部分 (80% 程度) は、コードやスタックに含まれていません。すべて Core Animation コードにあるようです。なぜこれができるのか誰かが知っているでしょうか?

私のUICollectionViewCellサブクラスには、次のようなものがあります。

UIImage *img = [self obtainImageForCell];
img = [img applySaturation:0.5];
self.imageView.image = img;

applySaturation次のようになります。

CIImage *image = [CIImage imageWithCGImage:self.CGImage];
CIFilter *filter = [CIFilter filterWithName:@"CIColorControls"];
[filter setValue:image forKey:kCIInputImageKey];
[filter setValue:[NSNumber numberWithFloat:saturation] forKey:@"inputSaturation"];
return [UIImage imageWithCIImage:filter.outputImage];

私の唯一の推測は、Core Animation は Core Image ではうまく機能しないということです。Appleのドキュメントでは、次のように述べていCIImageます。

CIImage オブジェクトには画像データが関連付けられていますが、画像ではありません。CIImage オブジェクトは、イメージの「レシピ」と考えることができます。CIImage オブジェクトには、画像を生成するために必要なすべての情報が含まれていますが、Core Image は、そうするように指示されるまで、実際には画像をレンダリングしません。この「遅延評価」方式により、Core Image は可能な限り効率的に動作することができます。

アニメーションの最後の最後にこの評価を行うのは難しいかもしれません。

4

2 に答える 2