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.