2013-08-20 35 views
0

親愛的同學可可程序員通過繪製,的NSView不會bezierpath

我想什麼來完成:

我有一個複選框,一個彈出式按鈕(這是隱藏的)和一個NSView我帆布。 如果選中了myCheckbox - >顯示popUpButton並通過NSView上的bezierPath繪製一條線。 如果myCheckbox未選中 - >再次隱藏彈出式按鈕和 「拉開」 路徑

的代碼:

- (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彈出式按鈕是可見,但線路不會畫出,我想知道爲什麼......我個人認爲這是一個連接問題。

我上傳的工程文件(這是相當小35KB)位置:Drawing.zip

全球: 我讀過的NSView文檔和它的說法,只有一個提請視圖方式,它是通過drawRect方法。這是真的嗎?這是否是一種下降的方式來繪製視圖? (如果函數的觀點和setNeedsDisplay:YES的方法)

在此先感謝, 本

+0

發現了問題:它是一個連接問題和 自我setNeedsDisplay:YES 應該是:MyView的setNeedsDisplay:YES 挺傻了!感謝您的幫助tho –

回答

0

您將需要得到一個NSColor實例,然後調用它setStroke設置當前筆觸顏色。它不知道在drawRect:的起始位置使用哪種顏色來描述路徑,因此您必須告訴它。

+0

Jesper,代碼運行,但它不會做'伎倆'héhé。我只是將Drawing.zip更改爲正確的鏈接,對不起。 –

+0

錯過了一些東西。正在更新答案... – Jesper

+0

這很奇怪,因爲這條線沒有IF語句。 –