2015-10-18 20 views
0

在客戶UICollectionViewCell和UICollectionViewLayout的自定義UICollectionView設備旋轉後,如何觸發重繪(即調用drawrect)?如何在自定義UICollectionView旋轉後觸發drawrect?

額外的來自自定義UICollectionViewCell功能:

override func drawRect(rect: CGRect) { 
     let path = UIBezierPath(roundedRect: self.bounds.insetBy(dx: 1, dy: 1), cornerRadius: 50) 
     path.lineWidth = 3 
     UIColor.blueColor().setStroke() 
     path.stroke() 
    } 

旋轉前

Before rotation

輪換(佈局進行了更新後,注意標籤感動,但是橢圓形的drawRect繪製過去不是,記錄顯示「drawRect」在旋轉時不被調用)

After rotation

+0

可能重複的[在ios中重繪視圖](http://stackoverflow.com/questions/13135502/redrawing-a-view-in-ios) – Edman

回答

1

轉動後需要撥打cell.setNeedsDisplay()。這將導致單元格的drawRect:方法再次被觸發。

+0

從哪裏?是否有必要遍歷我的自定義佈局類「prepareLayout」函數中的所有可見單元格? – Greg

+0

'setNeedsDisplay'方法觸發重新繪製它所調用的視圖。何時打電話,完全取決於個人實施。一旦進入你的流程,你有一些數據改變,可能導致潛在的用戶界面改變,然後你調用這個方法來反映用戶界面上的數據改變。是的,這隻重繪了它所稱的目標視圖。因此,如果您的數據在2個單元格上更改並且您想重新繪製它們,請在這兩個單元格上調用它。希望它是有道理的! – Abhinav

+0

謝謝 - 在viewController中的collectionView(或者它的父視圖)上有趣地稱這個(即setNeedsDisplay)不起作用,但是訪問佈局並在viewController中循環遍歷所有可見的單元不起作用 – Greg

0

我剛剛發現了一個更簡單的解決方案來解決這個問題。在您的自定義單元實現中,將contentMode屬性(在UIView上)設置爲Redraw。這會導致setNeedsDisplay:在單元格邊界更改時自動調用。