我的應用程序中有一個UICollectionView
,它的單元格主要由UIImageView
組成,其中包含已使用Core Image處理的圖像以減少顏色飽和度。滾動時的性能是非常糟糕的。當我描述它時,大部分時間(80%左右)都不在我的代碼中,甚至在我的堆棧中。這一切似乎都在覈心動畫代碼中。可能有人知道這可能是爲什麼?UICollectionView與使用Core Image控制的圖像的UIImageViews性能不佳
在我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];
我唯一的猜測是,核心動畫不與核心形象發揮出色。 Apple docs對此有所描述CIImage
:
儘管CIImage對象具有與其關聯的圖像數據,但它不是圖像。您可以將CIImage對象視爲圖像的「配方」。CIImage對象具有生成圖像所需的所有信息,但Core Image實際上並不會渲染圖像,除非被告知這樣做。這種「懶惰評估」方法允許Core Image儘可能高效地運行。
在動畫製作過程中最後一分鐘做這個評估可能會很棘手。
您是否嘗試過一次過濾和緩存結果? –
我看到相同的緩慢滾動行爲。 – openfrog