我有一个主视图(NSView的子类),因为我是cocoa的新手,我想知道如何根据事件更新视图。
我知道有很多方法可以采用-(void)mouseMoved:(NSEvent*)event
或- (void)mouseClicked:(NSEvent*)event
我的算法等事件来确定准备工作。我想知道应该在哪里更新主视图:是-(void)mouseMoved:(NSEvent*)event
还是- (void)drawRect:(NSRect)dirtyRect
。如果它在drawRect中,那么我应该如何将信息传递给它呢?
提前致谢!
答案 0 :(得分:3)
这是一个快速的解释,希望能帮助你:
用户操作通过事件(键盘+鼠标)和操作(按钮和其他控件解释的事件)传递到您的视图和窗口。您的视图应通过更新模型来响应这些事件和操作,模型是表示程序向用户显示的任何低级数据结构。如果是Cocoa,视图通常通过 controller 对象进行通信,以对模型进行更改。
更新模型后,需要通知视图需要重绘。这可以通过多种方式完成,但最简单的方法是-setNeedsDisplay:YES
。这将确保在不久的将来某个时刻,您的视图将重新绘制以显示更新的模型数据。
在某些时候,Cocoa会在你的观点上调用-drawRect:
。在-drawRect:
内,您应该从模型中读取必要的数据并绘制必要的图形。您不应该在此方法中对模型进行任何操作。