Schlechte UICollectionView-Scrolling-Performance Mit UIImage

Ich habe eine UICollectionView in meiner app, und jede Zelle ist ein UIImageView und einige Beschriftungen. Das problem ist, dass wenn ich die UIImageViews zeigen Ihre Bilder, die Scroll-performance ist schrecklich. Es ist nirgendwo nahe so glatt wie das scrolling Erfahrung einer UITableView oder sogar die gleichen UICollectionView, ohne die UIImageView.

Fand ich diese Frage von vor ein paar Monaten, und es scheint wie eine Antwort gefunden wurde, sondern es ist geschrieben in RubyMotion, und das habe ich nicht verstanden. Ich habe versucht, um zu sehen, wie es zu konvertieren, um Xcode, da ich aber noch nie benutzt NSCache entweder, es ist ein wenig schwer zu. Das poster ist auch darauf zu hier über die Implementierung etwas zusätzlich zu Ihrer Lösung, aber ich bin nicht sicher, wo zu setzen, dass der code entweder. Vielleicht, weil ich nicht verstehen, den code aus dem erste Frage.

Wäre jemand in der Lage zu helfen, übersetzen diese in 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

Hier ist der code aus der zweite Frage, dass der Fragesteller von der erste Frage gesagt das problem gelöst:

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

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

Wieder, ich bin mir nicht sicher, wie/wo und zu implementieren.

Vielen Dank.

  • Veröffentlichen Sie Ihren code! Was haben Sie versucht? Warum ist die Leistung Ihrer app so langsam? Was ist das Ergebnis von profiling, um zu sehen, was Los ist???
  • Es ist nicht meine gesamte app ist langsam, es ist nur einen Bildlauf durch die Zellen in der UICollectionView. Der rest der app funktioniert sehr gut. Ich bin derzeit mit cell.cardImageView.image = [UIImage imageWithData:[NSData dataWithContentsOfFile:tempCard]]; um das Bild. Das Bild(s) verwendet wird, ist nicht Teil des app-bundle, sondern in der Regel heruntergeladen und gespeichert in dem Cache-Ordner.
InformationsquelleAutor Nick | 2013-04-03
Schreibe einen Kommentar