2011-03-31 68 views
2

我試圖在我的NSView的頂部繪製其子視圖。 事實上,我試圖重現Interface Builder的連接線樣式。下面是我使用的那一刻代碼:如何在NSView的子視圖上繪製

- (void)drawRect:(CGRect)dirtyRect 
{ 
    // Background color 
    [[NSColor whiteColor] setFill]; 
    NSRectFill(dirtyRect); 

    // Draw line 
    if(_connecting) 
    { 
     CGContextRef c = [[NSGraphicsContext currentContext] graphicsPort]; 
     [[NSColor redColor] setStroke]; 

     CGContextMoveToPoint(c, _start.x, _start.y); 
     CGContextAddLineToPoint(c, _end.x, _end.y);   
     CGContextSetLineWidth(c, LINE_WIDTH); 
     CGContextClosePath(c); 
     CGContextStrokePath(c); 
    } 
} 

,第一部分是顏色,我NSView(如果您知道其他的方式,請告訴我,因爲我來自iPhone開發想念backgroundColor財產UIView

然後,如果一個連接,如果檢測到,我畫它與2 NSPoint s。此代碼有效,但我沒有得到它,只能在第一個NSView上繪製子視圖。

回答

9

父視圖無法繪製其子視圖。你必須在子視圖上放置另一個視圖並在那裏畫線。

+0

我以爲這個解決方案,但我認爲這是一個醜陋的方式。那麼,我會這樣做。 – klefevre 2011-03-31 12:58:19

+1

如果我需要原始子視圖來接收鼠標事件,頂部不被遮擋,繪製子視圖會怎麼樣? – 2012-01-22 15:19:09

+1

您可以重寫超級視圖上的hitTest,以避免重疊視圖。 – 2013-02-05 00:09:45