5

在 Cocoa 中,当我们想要重绘视图时,我们会向视图发送一条setNeedsDisplay:消息,告诉视图重绘自身,并带有 YES 参数。我想知道是否在任何情况下您想要发送 view setNeedsDisplay:NO,例如多线程环境,如果发送 view a setNeedsDisplay:YES,那么在 with 之后立即再次设置它setNeedsDisplay:NO会使视图重绘本身。如果没有理由调用setNeedsDisplay:NO,那么为什么要创建这样一个乏味的方法,他们可以在其中实现类似的东西[view redrawView]

4

2 回答 2

1

setNeedsDisplay:NO如果您想丢弃以前调用setNeedsDisplay:YES的 . 例如,有时将所有子视图标记为需要显示然后运行算法来取消标记其中一些会更容易。

于 2012-11-21T11:52:24.800 回答
-2

您可能知道,每次通过正常事件循环时,显示更新都是自动的(如果需要)。如果有必要,您可以调用setNeedsDisplay:以强制在两者之间进行显示更新。

从以下文档NSView

讨论
每当用于绘制视图对象的数据或状态发生变化时,应该向视图发送 setNeedsDisplay: 消息。标记为需要显示的 NSView 对象在每次通过应用程序的事件循环时自动重新显示。(当然,在事件循环出现之前需要重新显示的视图对象可以立即发送适当的 display... 方法。)

此函数的布尔参数仅指定是否影响相关视图的整个边界,而不是某些属性“needsDisplay”设置为 true 或 false。因此,setNeedsDisplay:确实确实很像“redrawView”,只是使用了附加参数。

编辑

以上内容的灵感来自相同的文档:

flag
如果是,则将接收者的整个边界标记为需要显示;如果否,则将其标记为不需要显示。

于 2012-09-25T16:01:41.530 回答