当创建一个iOS应用程序,我很困惑,什么时候我需要调用setNeedsDisplay
? 我知道,它是与更新/重绘UI; 然而,我是否需要每次我改变我的任何意见这个时间打电话?
例如,我需要调用它:
- 后在文本字段编程方式更改文本
- 当改变视图的背景是什么?
- 当我做在viewDidLoad中的变化?
- 怎么样在viewDidAppear?
可能有人给我关于何时使用此方法的一般准则?
当创建一个iOS应用程序,我很困惑,什么时候我需要调用setNeedsDisplay
? 我知道,它是与更新/重绘UI; 然而,我是否需要每次我改变我的任何意见这个时间打电话?
例如,我需要调用它:
可能有人给我关于何时使用此方法的一般准则?
您应该只被调用setNeedsDisplay如果你的UIView的子类,基本上是在屏幕上画一些东西,像线条,图像或类似矩形形状的自定义视图覆盖的drawRect。
所以,你应该叫setNeedsDisplay当你在这本图取决于更改几个变量和观点,以表示变化,你需要调用这个方法在内部将给予的drawRect打个电话,重绘组件。
当您添加一个ImageView的或一个UIButton作为一个子视图或更改任何子视图,你不必调用该方法。
例:
您有一个观点,显示了移动一圈,要么你触摸和移动它,也可以是基于定时器的动画。 现在,对于这一点,你需要,在给定的中心,并与给定半径画一个圆自定义视图。 这些被保存作为修改通过改变其中心移到圆或使其变大,通过增加它的半径实例变量。
现在,在这种情况下,要么你将修改循环和定时器这些变量(中心或半径),也可以通过在touchesEnded和touchesMoved方法,你的手指。 为了反映这个属性,你需要重绘此视图,你会打电话setNeedsDisplay的变化。
你真的只需要调用-setNeedsDisplay
上画的内容与UIView的子类-drawRect:
对于标签和其他标准控件,更改文本会自动导致标签重绘,所以你不需要自己做。
setNeedsDisplay:
当你要明确刷新视图应该叫。 它只是设置一个内部标志,而iOS的UI,系统会调用drawRect:
以后在适当的时候。
这听起来像它应该当你更新可能更改演示文稿的任何财产总是叫。 但事实并非如此。 几乎所有的标准UI控件已经处理这一点。 我相信,只要你修改标准UI组件(视图)的性能setNeedsDisplay:
将内部触发,以及受影响的区域将被重新绘制。 (在所有的情况下,您列出)
但是,如果你创建自己的观点,实现了自己drawRect:
以及要更新,当事情已经改变了,你必须调用setNeedsDisplay:
明确。
我认为@Amogh Talpallikar说清楚。 我只是想讨论一两件事。
在事实,你应该避免重写drawRect
除非你真的需要它,因为它可能会导致糟糕的表现。 你可以参考这个https://yalantis.com/blog/mastering-uikit-performance/
如果你只希望改变框,按钮的位置,标签,...你可以叫setNeedLayout
或layoutIfNeeded
你会打电话给setNeedDisplay当你正在改变,你的看法自定义绘图所依赖的属性。 这将显式调用drawRect:方法强制。