drawRect的奇怪行为:覆盖NSView?

时间:2011-05-16 15:49:22

标签: objective-c cocoa interface-builder nsview

问候所有人,

首先,谢谢大家帮助我解决以前的问题。

我在覆盖drawRect时看到奇怪的行为:对于NSView。我有一个非常简单的NSView子类(RoundedView),它只覆盖drawRect。我已在界面构建器中将自定义视图的类设置为RoudedView。在那个视图里面我有一个标签。 drawRect:按预期正确调用,但令我惊讶的是,还为该视图中的Label调用了RoundedView drawRect:。这会导致标签的rect由drawRect绘制,而drawRect仅用于自定义视图,而不是该视图中的任何其他元素。结果,标签的rect不正确。自定义视图位于一个窗口内,该窗口的styleMask设置为NSBorderlessWindowMask。

这是正确的行为吗?如何阻止对属于视图的元素调用drawRect?

我已经在堆栈中查看了所有相关帖子,但遗憾的是空白。

谢谢,

罗伯特

1 个答案:

答案 0 :(得分:3)

不要指望传递给drawRect:的矩形始终是您的视图边界。 NSView只能重绘需要重绘的部分(因此,该参数称为dirtyRect)。在这种情况下,标签与视图的内容重叠,因此无论何时重绘,视图系统还需要重绘其后面的视图(您的)。

如果您的视图的绘图不是很复杂,您可以忽略传递给您的矩形并改为使用视图的边界,否则,您将需要弄清楚如何仅绘制视图的一部分'脏'。