2 votes

Problème de performance dans UICollectionView

J'ai un UICollectionView dont les éléments contiennent un imageview sur lequel j'applique CIFilters. Il y a donc environ 12 éléments qui sont générés, mais lorsque je fais défiler les éléments dans la vue de la collection, il y a un petit problème lorsque le nouvel élément est généré. Existe-t-il un moyen de configurer les éléments de UICollectionView sans ce délai.

Actuellement, j'applique des filtres dans cellForItemAtIndexPath de la méthode déléguée de 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                 
}

0voto

Ghulam Ali Points 1605

Vous générez CIImage, CIFilter, UIImage à chaque fois que la cellule est visualisée. N'oubliez pas que cellForItemAtIndexPath est appelé chaque fois que la cellule est en cours d'affichage, de sorte que lorsque l'utilisateur fait défiler et revient, cette fonction est exécutée à nouveau.

Vous devez créer toutes les images une fois dans la méthode init() et les enregistrer dans le tableau. Utilisez ensuite ces images dans cette fonction pour les afficher.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X