NSView不会通过bezierpath绘制

时间:2013-08-20 08:18:04

标签: cocoa nsview nsbezierpath

亲爱的Cocoa程序员,

我想要完成的任务:

我的画布上有一个复选框,一个popUpButton(隐藏)和一个NSView。 如果选中myCheckbox,请执行以下操作:>显示popUpButton并在NSView上通过bezierPath绘制一条线。 如果myCheckbox是UNchecked - >再次隐藏popUpButton并“取消”路径

代码:

- (IBAction)isChecked:(id)sender {
  //if myChekcbox is checked, show the pop up button
  if ([sender state]==NSOnState) {
    NSLog(@"Checked");
    [myPopUp setHidden:NO];
  }
  else
  {
    //if the checkbox is unchecked, hide the popupbutton
    [myPopUp setHidden:YES];
    NSLog(@"Unchecked");

  }
  //reload my drawrect method (reload the view)
  [self setNeedsDisplay:YES];
}

- (void)drawRect:(NSRect)dirtyRect
{
  //if the checkedbutton is checked, draw the line
  if ([myCheckbox state]==NSOnState)
  {
    NSBezierPath *myPath = [NSBezierPath bezierPath];
    [myPath moveToPoint:NSMakePoint(10, 20)];
    [myPath lineToPoint:NSMakePoint(50, 20)];
    [myPath setLineWidth:2];
    [myPath stroke];
  }

}

问题:

如果选中状态= NSOnState,则popUpButton可见,但该行不会绘制,我想知道为什么......我个人认为这是一个连接问题。

我在这里上传了项目文件(它相当小--35kb):Drawing.zip

全局: 我已经阅读了NSView文档,它说只有一种方法可以绘制到视图,它是通过drawRect方法实现的。这是真的吗?这也是一种绘制视图的下降方式吗? (如果视图中的函数和方法中的setNeedsDisplay:YES)

提前谢谢, 本

1 个答案:

答案 0 :(得分:0)

您需要获取NSColor个实例,然后在其上调用setStroke以设置当前笔触颜色。它不知道在drawRect:开始时使用哪种颜色来描边路径,所以你必须告诉它。