Swift慢收集查看

问题描述:

我有一个收集视图,拍摄我已经存储并显示它们的图像。但是,当我运行它时,会出现内存错误和非常慢/延迟的显示。这里是我的代码:Swift慢收集查看

var players = ["1", "2", "3", "4", "5", "10", "11", "12", "13", "15", "20", "22", "24", "25", "31", "31", "33", "34"] 


@IBOutlet weak var collectionView: UICollectionView! 
func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int { 
    return 1 
} 

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 

    return 17 


} 
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
    var cell = collectionView.dequeueReusableCellWithReuseIdentifier("MyCell", forIndexPath: indexPath) as HomeCollectionViewCell 
    cell.imageViewTwo.image = UIImage(named: "\(players[indexPath.row])") 
    return cell 
} 

有没有更容易的方法来做到这一点,我失踪了?

+0

什么部分很慢?第一次加载视图?滚动? – dpassage 2014-12-04 04:01:29

+0

滚动。我压缩了图像,现在看起来效果更好,但我依然觉得这是一个解决方案 – 2014-12-04 04:02:44

你应该使用仪器来确定它是什么慢。这就是它的目的!

不过,我要去猜测,这条线就是问题所在:

cell.imageViewTwo.image = UIImage(named: "\(players[indexPath.row])") 

如果这些图像是大的,两个坏的事情会发生:它需要时间来打开每个之一,你是在浪费内存,因为显示的图像比加载的图像小得多。当您滚动时,发生这种情况。正因如此,您在cellForItemAtIndexPath:中所做的一切都需要非常快速。那么,你的实现显然不是很快。

你有两个选择 - 其实,你可以同时使用:

  • 准备更好的图像。使用png并以显示所需的实际尺寸使用它们。

  • 使用惰性图像加载,以便在后台线程中加载图像,并且不会减慢滚动速度。