2013-04-11 39 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

相关问题