你必须显式调用setNeedsDisplay
如在下列情况下,呼吁UIView
setFrame
后?你是否必须在UIView上调用setFrame之后显式调用setNeedsDisplay?
view1.frame = frame;
[view1 setNeedsDisplay];
[view2 setFrame:frame];
你必须显式调用setNeedsDisplay
如在下列情况下,呼吁UIView
setFrame
后?你是否必须在UIView上调用setFrame之后显式调用setNeedsDisplay?
view1.frame = frame;
[view1 setNeedsDisplay];
[view2 setFrame:frame];
简短的回答:没有
你叫setNeedsDisplay
当你需要方法drawRect
被调用,并根据UIView Class Reference
.-
自动更改边框矩形重新显示接收机 而无需调用drawRect:方法。如果您希望的drawRect:当框架矩形的变化,contentMode 属性设置为UIViewContentModeRedraw 方法调用。
答案是Yes和No两个,视情况而定,
案例1。如果通过覆盖 定制视图(即UIView的子类)中的drawRect方法来绘制某些东西,则需要调用 setNeedsDisplay,否则该绘图或该模式将根据新框架拉伸,并且看起来很糟糕。 如果你想重绘它,请调用setNeedsDisplay。
案例2。如果你正在 画我认为这是一个难得的可能性东西,将看起来很好,即使它被拉伸, ,
或者不重写的drawRect可言,那么你就不需要请致电 setNeedsDisplay。
不完全正确,所有子视图'拉伸'只会基于contentMode设置(默认情况下在大多数情况下设置为缩放)。然而,'UIViewcontentModeRedraw'意味着如果视图的实际边界发生变化,您将不需要调用setNeedsDisplay,因为它会代表您调用setNeedsDisplay。 – strange
但'setNeedsDisplay'电话后,每'setFrame'和'.frame ='等于'contentMode = UIViewContentModeRedraw'? – Dmitry
不完全:'UIViewContentModeRedraw 重新显示时通过调用setNeedsDisplay method.' bounds属性的边界变化不等同于帧中的图。 – ssantos
谢谢,'setFrame'完全等价于'.frame'吗? – Dmitry