我的应用程序中有一个 UICollectionView,每个单元格都是一个 UIImageView 和一些文本标签。问题是当我让 UIImageViews 显示他们的图像时,滚动性能很糟糕。它远不如 UITableView 的滚动体验,甚至没有 UIImageView 的相同 UICollectionView 的滚动体验那么流畅。
我从几个月前发现了这个问题,似乎找到了答案,但它是用 RubyMotion 编写的,我不明白。我试图看看如何将它转换为 Xcode,但由于我也从未使用过 NSCache,所以有点难。那里的张贴者还在这里指出除了他们的解决方案之外还要实现一些东西,但我也不知道该把代码放在哪里。可能是因为我不理解第一个问题的代码。
有人可以帮助将其翻译成 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
这是第一个问题的提问者所说的第二个问题的代码解决了这个问题:
UIImage *productImage = [[UIImage alloc] initWithContentsOfFile:path];
CGSize imageSize = productImage.size;
UIGraphicsBeginImageContext(imageSize);
[productImage drawInRect:CGRectMake(0, 0, imageSize.width, imageSize.height)];
productImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
同样,我不确定如何/在哪里实现它。
非常感谢。