我什么时候需要调用setNeedsDisplay iOS中?我什么时候需要调用setNeedsDis

2019-05-12 22:03发布

当创建一个iOS应用程序,我很困惑,什么时候我需要调用setNeedsDisplay ? 我知道,它是与更新/重绘UI; 然而,我是否需要每次我改变我的任何意见这个时间打电话?

例如,我需要调用它:

  • 后在文本字段编程方式更改文本
  • 当改变视图的背景是什么?
  • 当我做在viewDidLoad中的变化?
  • 怎么样在viewDidAppear?

可能有人给我关于何时使用此方法的一般准则?

Answer 1:

您应该只被调用setNeedsDisplay如果你的UIView的子类,基本上是在屏幕上画一些东西,像线条,图像或类似矩形形状的自定义视图覆盖的drawRect。

所以,你应该叫setNeedsDisplay当你在这本图取决于更改几个变量和观点,以表示变化,你需要调用这个方法在内部将给予的drawRect打个电话,重绘组件。

当您添加一个ImageView的或一个UIButton作为一个子视图或更改任何子视图,你不必调用该方法。

例:

您有一个观点,显示了移动一圈,要么你触摸和移动它,也可以是基于定时器的动画。 现在,对于这一点,你需要,在给定的中心,并与给定半径画一个圆自定义视图。 这些被保存作为修改通过改变其中心移到圆或使其变大,通过增加它的半径实例变量。

现在,在这种情况下,要么你将修改循环和定时器这些变量(中心或半径),也可以通过在touchesEnded和touchesMoved方法,你的手指。 为了反映这个属性,你需要重绘此视图,你会打电话setNeedsDisplay的变化。



Answer 2:

你真的只需要调用-setNeedsDisplay上画的内容与UIView的子类-drawRect:

对于标签和其他标准控件,更改文本会自动导致标签重绘,所以你不需要自己做。



Answer 3:

setNeedsDisplay:当你要明确刷新视图应该叫。 它只是设置一个内部标志,而iOS的UI,系统会调用drawRect:以后在适当的时候。

这听起来像它应该当你更新可能更改演示文稿的任何财产总是叫。 但事实并非如此。 几乎所有的标准UI控件已经处理这一点。 我相信,只要你修改标准UI组件(视图)的性能setNeedsDisplay:将内部触发,以及受影响的区域将被重新绘制。 (在所有的情况下,您列出)

但是,如果你创建自己的观点,实现了自己drawRect:以及要更新,当事情已经改变了,你必须调用setNeedsDisplay:明确。



Answer 4:

我认为@Amogh Talpallikar说清楚。 我只是想讨论一两件事。

在事实,你应该避免重写drawRect除非你真的需要它,因为它可能会导致糟糕的表现。 你可以参考这个https://yalantis.com/blog/mastering-uikit-performance/

如果你只希望改变框,按钮的位置,标签,...你可以叫setNeedLayoutlayoutIfNeeded



Answer 5:

你会打电话给setNeedDisplay当你正在改变,你的看法自定义绘图所依赖的属性。 这将显式调用drawRect:方法强制。



文章来源: When do I need to call setNeedsDisplay in iOS?