Cocoa NSResponder方法仅调用setNeedsDisplay

Cocoa NSResponder方法仅调用setNeedsDisplay,cocoa,nsview,setneedsdisplay,nsresponder,Cocoa,Nsview,Setneedsdisplay,Nsresponder,我有一个openGl视图的子类。在其中一种方法中,我设置了一个标志来绘制黑色或白色背景。在方法的末尾,我调用setNeedsDisplay。这永远不会被呼叫!我有一个SetNeeds显示在mouseDownEvent中。当我点击视图时,它会调用它!我的背景会改变颜色。有什么想法吗?这是代码 在openGL视图中 -(long)setBackgroundBlack:(BOOL)flag{ if(flag == YES){ blkBg = YES; [self setNeedsDi

我有一个openGl视图的子类。在其中一种方法中,我设置了一个标志来绘制黑色或白色背景。在方法的末尾,我调用setNeedsDisplay。这永远不会被呼叫!我有一个SetNeeds显示在mouseDownEvent中。当我点击视图时,它会调用它!我的背景会改变颜色。有什么想法吗?这是代码

在openGL视图中

-(long)setBackgroundBlack:(BOOL)flag{
if(flag == YES){
    blkBg = YES;

    [self setNeedsDisplay:YES];

}else if (flag == NO){
    blkBg = NO;
    [self  setNeedsDisplay:YES];

}

if (flag == blkBg){

    return 0;



}else{
    return 1;
}
}

- (void)mouseDown:(NSEvent *)theEvent
{
lastDragLocation = [[self superview] convertPoint:[theEvent locationInWindow] fromView:nil];
    NSPoint newPoint;
    newPoint.x = lastDragLocation.x * (2.0 / self.bounds.size.width) - 1.0;
    newPoint.y = lastDragLocation.y * (2.0 / self.bounds.size.width) - 1.0;
    [self setNeedsDisplay:YES];
}
应用程序内代理

-(IBAction)claim1931BW:(id)sender{

long res = [_myPlotView setBackgroundBlack:NO];

NSLog(@"%ld", res);
[self.cie1931BWMenu setState:NSOnState];
[self.cie1931ColorMenu setState:NSOffState];

}

你实际上在哪里改变背景颜色?这最终需要在
drawRect
@boyfarrell-Inside-drawRect中完成,我调用[self-drawColorCIE],在该方法中,我有openGl绘图代码,该代码具有背景更改的标志。drawRect不是从-setBackgroundBlack方法调用的。由于结构和命名的原因,很难遵循方法和变量的逻辑。我会把这些都去掉,重新开始。为视图提供一个属性
backgroundcolor
,并在
drawRect
中使用
NSRectFill
填充此颜色。你现在要做的就是让你的方法改变视图的背景颜色,并调用
setNeedsDisplay
@boyfarrell,所以我想我必须对OpenGL自定义视图进行子类化,并在子类上显示所有我的-setNeedsDisplay。谢谢你。所有方法名称对程序都有意义。