在事件功能中更新NSView

时间:2011-01-12 08:37:57

标签: cocoa nsview

我有一个主视图(NSView的子类),因为我是cocoa的新手,我想知道如何根据事件更新视图。 我知道有很多方法可以采用-(void)mouseMoved:(NSEvent*)event- (void)mouseClicked:(NSEvent*)event我的算法等事件来确定准备工作。我想知道应该在哪里更新主视图:是-(void)mouseMoved:(NSEvent*)event还是- (void)drawRect:(NSRect)dirtyRect。如果它在drawRect中,那么我应该如何将信息传递给它呢?

提前致谢!

1 个答案:

答案 0 :(得分:3)

这是一个快速的解释,希望能帮助你:

  • 处理事件

用户操作通过事件(键盘+鼠标)和操作(按钮和其他控件解释的事件)传递到您的视图和窗口。您的视图应通过更新模型来响应这些事件和操作,模型是表示程序向用户显示的任何低级数据结构。如果是Cocoa,视图通常通过 controller 对象进行通信,以对模型进行更改

  • 使显示/触发器重绘无效

更新模型后,需要通知视图需要重绘。这可以通过多种方式完成,但最简单的方法是-setNeedsDisplay:YES。这将确保在不久的将来某个时刻,您的视图将重新绘制以显示更新的模型数据。

  • 绘制

在某些时候,Cocoa会在你的观点上调用-drawRect:。在-drawRect:内,您应该从模型中读取必要的数据并绘制必要的图形。您不应该在此方法中对模型进行任何操作。