2014-12-04 64 views
0

我有一個收集視圖,拍攝我已經存儲並顯示它們的圖像。但是,當我運行它時,會出現內存錯誤和非常慢/延遲的顯示。這裏是我的代碼: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

回答

3

你應該使用儀器來確定它是什麼慢。這就是它的目的!

不過,我要去猜測,這條線就是問題所在:

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

如果這些圖像是大的,兩個壞的事情會發生:它需要時間來打開每個之一,你是在浪費內存,因爲顯示的圖像比加載的圖像小得多。當您滾動時,發生這種情況。正因如此,您在cellForItemAtIndexPath:中所做的一切都需要非常快速。那麼,你的實現顯然不是很快。

你有兩個選擇 - 其實,你可以同時使用:

  • 準備更好的圖像。使用png並以顯示所需的實際尺寸使用它們。

  • 使用惰性圖像加載,以便在後臺線程中加載圖像,並且不會減慢滾動速度。