Desempenho de rolagem do UICollectionView ruim com o UIImage

Eu tenho um UICollectionView no meu aplicativo e cada célula é um UIImageView e alguns rótulos de texto. O problema é que quando eu tenho o UIImageViews exibindo suas imagens, o desempenho de rolagem é terrível. Não é nem de perto tão fácil quanto a experiência de rolagem de um UITableView ou até mesmo o mesmo UICollectionView sem o UIImageView.

eu encontreiessa questão de alguns meses atrás, e parece que uma resposta foi encontrada, mas está escrita em RubyMotion, e eu não entendo isso. Eu tentei ver como convertê-lo para Xcode, mas desde que eu nunca usei NSCache, é um pouco difícil. O cartaz também apontou paraAqui sobre implementar algo além de sua solução, mas também não sei onde colocar esse código. Possivelmente porque eu não entendo o código doprimeira pergunta.

Alguém poderia ajudar a traduzir isso para o Xcode?

def viewDidLoad
  ...
  @images_cache = NSCache.alloc.init
  @image_loading_queue = NSOperationQueue.alloc.init
  @image_loading_queue.maxConcurrentOperationCount = 3
  ...
end

def collectionView(collection_view, cellForItemAtIndexPath: index_path)
  cell = collection_view.dequeueReusableCellWithReuseIdentifier(CELL_IDENTIFIER, forIndexPath: index_path)
  image_path = @image_paths[index_path.row]

  if cached_image = @images_cache.objectForKey(image_path)
    cell.image = cached_image
  else
    @operation = NSBlockOperation.blockOperationWithBlock lambda {
      @image = UIImage.imageWithContentsOfFile(image_path)
      Dispatch::Queue.main.async do
        return unless collectionView.indexPathsForVisibleItems.containsObject(index_path)
        @images_cache.setObject(@image, forKey: image_path)
        cell = collectionView.cellForItemAtIndexPath(index_path)
        cell.image = @image
      end
    }
    @image_loading_queue.addOperation(@operation)
  end
end

Aqui está o código dosegunda questão que o consulente doprimeira pergunta disse resolveu o problema:

UIImage *productImage = [[UIImage alloc] initWithContentsOfFile:path];

CGSize imageSize = productImage.size;
UIGraphicsBeginImageContext(imageSize);
[productImage drawInRect:CGRectMake(0, 0, imageSize.width, imageSize.height)];
productImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

Novamente, não tenho certeza de como / onde implementar isso.

Muito Obrigado.

questionAnswers(3)

yourAnswerToTheQuestion