2016-02-08 69 views
0

我有一個UICollectionViewController和一些單元(UICollectionViewCell)。我想在一些單元上繪製圖像。這工作正常,但是當我滾動時,一些單元格似乎被不必要地重用,換句話說,我沒有明確繪製的單元格正在繪製(僅在滾動後)。細胞被過度重複使用

在我的手機我做到以下幾點:

imageView = UIImageView(frame: CGRectMake((self.bounds.size.width/4)-1, (self.bounds.size.height/4)-1, 30, 30)); 
imageView!.image = imageTick 
self.addSubview(self.lblDay) 
self.addSubview(imageView!) 

我創建的形象圖,並設定其圖像然後添加標籤和圖像視圖。

有沒有人看到我做錯了什麼?

完整性這裏的情況恰恰是我如何初始化圖像的細胞:

let imageTick:UIImage = UIImage(named: "star")! 
var imageView:UIImageView? = nil 

回答

2

UICollectionViewCell S通過系統複用,所以你需要處理的細胞的可能性在被重用prepareForReuse方法在UICollectionViewCell,通過從細胞清除一切(設置圖像零到等)

Here is the doc for UICollectionReusableView that declares that

Here is the doc for UICollectionView您可以在DOC看到,FO方法dequeueReusableCellWithReuseIdentifier:forIndexPath:它討論如果有可用的單元重新使用,則調用prepareForReuse

+0

非常好的提示。我無圖像,它不會隨意出現在不需要的地方。但現在我需要重新渲染圖像。當它被選中時,我在單元格中設置了一個布爾值,但我應該在prepareForReuse中重置它。無論如何,我不確定何時可以重新繪製圖像。 – dasPing

+0

@dasPing你可以在你的dequeueReusableCellWithReuseIdentifier實現中爲你的單元設置正確的圖像 –

+0

@dasPing http://stackoverflow.com/questions/19269266/reused-cells-in-a-uicollectionview-show-multiple-uiimageviews-when-they - 也應該看看這個,它建議不要爲你的imageview使用addsubview –