2013-04-11 33 views

回答

10

簡短的回答:沒有

你叫setNeedsDisplay當你需要方法drawRect被調用,並根據UIView Class Reference .-

自動更改邊框矩形重新顯示接收機 而無需調用drawRect:方法。如果您希望的drawRect:當框架矩形的變化,contentMode 屬性設置爲UIViewContentModeRedraw 方法調用。

+0

但'setNeedsDisplay'電話後,每'setFrame'和'.frame ='等於'contentMode = UIViewContentModeRedraw'? – Dmitry

+3

不完全:'UIViewContentModeRedraw 重新顯示時通過調用setNeedsDisplay method.' bounds屬性的邊界變化不等同於幀中的圖。 – ssantos

+0

謝謝,'setFrame'完全等價於'.frame'嗎? – Dmitry

0

答案是Yes和No兩個,視情況而定,

案例1。如果通過覆蓋 定製視圖(即UIView的子類)中的drawRect方法來繪製某些東西,則需要調用 setNeedsDisplay,否則該繪圖或該模式將根據新框架拉伸,並且看起來很糟糕。 如果你想重繪它,請調用setNeedsDisplay。

案例2。如果你正在 畫我認爲這是一個難得的可能性東西,將看起來很好,即使它被拉伸, ,

或者不重寫的drawRect可言,那麼你就不需要請致電 setNeedsDisplay。

+0

不完全正確,所有子視圖'拉伸'只會基於contentMode設置(默認情況下在大多數情況下設置爲縮放)。然而,'UIViewcontentModeRedraw'意味着如果視圖的實際邊界發生變化,您將不需要調用setNeedsDisplay,因爲它會代表您調用setNeedsDisplay。 – strange

相關問題