我有以下代码,其中bool为true后我想在我的rect中添加一个绘图。这是我的代码,但由于某种原因它要么不设置bool或调用setNeedsDisplay。我正确地引用了另一个班级吗?感谢
//在AppController.m中
-(IBAction)colorToggle:(id)sender
{
if ([colorFilter state] == NSOnState)
{
CutoutView *theView = [[CutoutView alloc] init];
[theView setFilterEnabled:YES];
}
}
//在cutoutView.m
中- (void)drawRect:(NSRect)dirtyRect
{
[[[NSColor blackColor]colorWithAlphaComponent:0.9]set];
NSRectFill(dirtyRect);
//this is what i want to be drawn when my bool is true and update the drawRect
if (filterEnabled == YES) {
NSRectFillUsingOperation(NSMakeRect(100, 100, 300, 300), NSCompositeClear);
[self update];
}
}
-(void)update
{
[self setNeedsDisplay:YES];
}
答案 0 :(得分:2)
好的,你知道每个UILabel都不一样吗?比如,您可以从视图中删除一个UILabel,而其他所有UILabel也不会消失吗?好吧,你的CutoutView也是一样的。当您在那里写CutoutView *theView = [[CutoutView alloc] init];
时,会创建一个不会在任何地方显示的新 CutoutView。您需要与现有的 CutoutView交谈(可能是通过连接插座,但有许多完全有效的设计可以实现这一目标。)
答案 1 :(得分:0)
您忘记调用drawRect:
方法,它应如下所示:
CutoutView *theView = [[CutoutView alloc] init];
[theView setFilterEnabled:YES];
[theView setNeedsDisplay];
来自docs:
当视图的实际内容发生变化时,它就是您的 有责任通知系统您的视图需要 重绘。您可以通过调用视图的setNeedsDisplay或来执行此操作 setNeedsDisplayInRect:视图的方法。