2010-01-18 54 views
1

Hellow stackoverflow人, 我是Cocoa的新手。我有XCode 3.1可可/ Objective-C:在按钮上绘制矩形单击

情况: 我有一个NSObject的子类:(AppController)的一个动作,链接到一个按钮。我有一个自定义视图,连接到我的NSView子类(AppView),在drawRect命令中我画了一个矩形(所有这些东西都有效), 我在AppView.ma函数中 - (void)drawIt {..}绘制矩形。 现在我把它称为 - (void)drawRect ...与[self drawIt]。这也起作用。

我现在要做的是在点击按钮时调用drawIt。 (在AppController.m中,当Action - (IBAction)...因为按钮而被调用时)Click

我希望你能帮助我, 我是新来的stackoverflow,所以我不知道我应该过去所有这里的代码,但我可以,但也许它更容易阅读这样的

回答

6

你应该阅读Cocoa Drawing Guide概念材料。当系统认为有必要时,系统会要求您查看-drawRect:。在这方面,您可以随时要求您提出自己的看法。因此,您必须根据“绘制当前状态”来考虑这一点。

你应该做什么(在这个基本的情况下)可能是给你的自定义视图一个布尔属性“drawIt”,并让你的按钮操作在视图实例上切换。这样if (self.drawIt == YES),你可以调用你的矩形绘图代码。

当你调用-drawRect:(比如用白色填充整个边界)时,你总是应该做一些事情来“清除”视图,然后只有在符合条件时才会绘制条件内容。

实施例:

- (void)drawRect:(NSRect)aRect 
{ 
    // Clean up background (we ignore "aRect", drawing entire view at once) 
    [[NSColor whiteColor] set]; 
    NSRectFill([self bounds]); 

    // Do we want to draw our magic rect? 
    if ([self drawMagicRect]) 
    { 
    [[NSColor redColor] set]; 
    NSRectFill([self magicRect]); 
    } 
} 
+0

谢谢 - 所以在 - (IBAction为)buttonAction ... {我说:drawMagicRect = TRUE;所以它会重新加载视图和矩形将显示,我必须照顾drawMagicRects的默认值? – Samuel 2010-01-18 17:42:34

+0

你将不得不做你的功课:阅读关于Objective-C 2.0属性的文档。至于让它刷新,最佳做法通常是在更改后从属性的setter访问器方法内调用[self setNeedsDisplay:YES]。这将告诉系统该视图需要重绘。 – 2010-01-18 17:43:03

+0

好吧我要读一点,但我现在得到了基本的想法,谢谢^^ – Samuel 2010-01-18 17:45:53