我在我的应用程序中有一个UICollectionView,每个单元格都是一个UIImageView和一些文本标签。问题在于当我让UIImageView显示它们的图像时,滚动性能非常差。它的滚动体验远不及UITableView甚至没有UIImageView的同一UICollectionView流畅。
我发现几个月前这个问题,似乎找到了答案,但它是用RubyMotion编写的,我不懂那个。我试图看如何将其转换为Xcode,但由于我也从未使用过NSCache,所以有点困难。那里的发布者还指向这里关于实现除了他们的解决方案之外的东西,但我也不知道把那段代码放在哪里。可能是因为我不理解第一个问题中的代码。
这是第一个问题的提问者说解决了问题的第二个问题的代码:
我发现几个月前这个问题,似乎找到了答案,但它是用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();
再次说,我不确定如何/在哪里实现它。
非常感谢。
cell.cardImageView.image = [UIImage imageWithData:[NSData dataWithContentsOfFile:tempCard]];
来设置图像。所使用的图像不是应用程序包的一部分,而是通常下载并存储在Caches文件夹中。 - Nick