Słaba wydajność przewijania UICollectionView z UIImage

Mam aplikację UICollectionView w mojej aplikacji, a każda komórka to UIImageView i niektóre etykiety tekstowe. Problem polega na tym, że gdy mam UIImageViews wyświetlające swoje obrazy, wydajność przewijania jest straszna. Nigdzie nie jest tak gładka jak przewijanie UITableView lub nawet tego samego UICollectionView bez UIImageView.

znalazłemto pytanie sprzed kilku miesięcy i wygląda na to, że znaleziono odpowiedź, ale jest napisana w RubyMotion i nie rozumiem tego. Próbowałem przekonać się, jak przekonwertować go na Xcode, ale ponieważ nigdy nie używałem NSCache, jest to trochę trudne. Plakat tam również wskazywałtutaj o wdrażaniu czegoś oprócz ich rozwiązania, ale nie jestem też pewien, gdzie umieścić ten kod. Być może dlatego, że nie rozumiem kodu zpierwsze pytanie.

Czy ktoś mógłby pomóc przetłumaczyć to na 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

Oto kod zDrugie Pytanie że pytający opierwsze pytanie powiedział rozwiązał problem:

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

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

Ponownie, nie jestem pewien, jak to wdrożyć.

Wielkie dzięki.

questionAnswers(3)

yourAnswerToTheQuestion