2

私はimageviewを含む項目にCIFiltersを適用しています。したがって、生成される約12個のアイテムがありますが、コレクションビューでアイテムをスクロールすると、新しいアイテムが生成されたときに少し不具合があります。 この遅延なしでUICollectionViewの項目を設定する方法はありますか?UICollectionViewでのパフォーマンスの問題

現在、cellForItemAtIndexPath代理人方法UICollectionViewでフィルタを適用しています。

// filters array 
let arrayOfCIFilters = ["CIBumpDistortionLinear","CIPixellate","CISepiaTone","CITwirlDistortion","CIUnsharpMask","CIVignette","CIPhotoEffectNoir","CIColorInvert","CIMotionBlur","CIColorClamp","CIToneCurve","CIColorPosterize","CICircularScreen"] 


func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("c1", forIndexPath: indexPath) as! filterImagesCollectionViewCell 

    let ciImage = CIImage(image:originalImage) 
    ciFilter = CIFilter(name: arrayOfCIFilters[indexPath.row])! 
    ciFilter.setValue(ciImage, forKey: kCIInputImageKey) 
    cell.imageVIew.image = UIImage(CGImage: ciContext.createCGImage(ciFilter.outputImage!, fromRect: ciFilter.outputImage!.extent)) 
    cell.nameLabel.text = arrayOfCIFilters[indexPath.row] 
    return cell     
} 

答えて

0

セルを表示するたびにCIImage、CIFilter、UIImageを生成しています。 cellForItemAtIndexPathは、セルが現在表示されているときは常に呼び出されるので、ユーザーがスクロールして戻ったときにこの関数が再度実行されることを覚えておいてください。

init()メソッドですべてのイメージを一度作成し、配列に保存する必要があります。次に、この関数内でその画像を使用して表示します。

+0

init()メソッドで画像の配列を作成すると、フィルタリングする画像が1つあるため、配列には多くの画像が保持されません。 – ankit

+0

はい、それはそれを保持します。しかし、毎回イメージを作成するよりも優れています。これは、親コントローラがクリアされたときにクリア/ガベージコレクトされます。たとえば、UIViewControllerにUICollectionViewを表示している場合、UIViewControllerがクリアされたときに変数がクリアされたUICollectionViewがクリアされます。 –

+0

これは間違いなく助かります! – ankit