2012-04-04 43 views
1

我有下面的代碼,後一個布爾是真實的我想一個繪圖添加到我的矩形。這裏是我有的代碼,但由於某些原因,它不是設置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]; 
} 

回答

2

OK,你知道每一個的UILabel如何不相同?就像,你可以從視圖中刪除一個UILabel,而其他所有其他的都不會消失?那麼,你的CutoutView是一樣的。當你寫CutoutView *theView = [[CutoutView alloc] init];那裏,創建一個新的 CutoutView未在任何地方顯示。你需要跟你的現有 CutoutView(可能是通過連接一個出口,但也有任意數量的完全有效的設計,將實現這一目標)。

+0

謝謝!這非常有意義 – 2012-04-04 04:14:51

0

你忘記打電話給drawRect:方法,它應該是這樣的:

CutoutView *theView = [[CutoutView alloc] init]; 
[theView setFilterEnabled:YES]; 
[theView setNeedsDisplay]; 

docs

當您的視圖更改的實際內容,這是你的 責任通知你的觀點必須 重繪系統。您可以通過調用視圖的setNeedsDisplay或 setNeedsDisplayInRect:視圖的方法來執行此操作。

+0

感謝我得到你的意思,但即使當我用'[theView setNeedsDisplay:YES];'它仍然isint重繪矩形。我的布爾聲明是正確的嗎? – 2012-04-04 03:50:04