2013-03-20 110 views
0

如果我從我的視圖中刪除此方法一切正常(如果我點擊一個按鈕,沒有內容消失),所以這絕對是原因。無邊界窗口內容消失的問題

我想通過下面的代碼做一個圓形的窗口,並有一個漸變。這有什麼錯誤可能導致視圖上的內容消失?

- (void)drawRect:(NSRect)dirtyRect 
{ 
    [NSGraphicsContext saveGraphicsState]; 

    NSBezierPath *outerClip = [NSBezierPath bezierPathWithRoundedRect:[self bounds] 
                   xRadius:3.0 
                   yRadius:3.0]; 
    [outerClip setClip]; 

    NSGradient* aGradient = [[NSGradient alloc] 
          initWithStartingColor:[NSColor colorWithCalibratedWhite:1.0 alpha:1.0] 
          endingColor:[NSColor colorWithCalibratedWhite:0.65 alpha:1.0]]; 

    [aGradient drawInRect:[outerClip bounds] angle:270]; 

    [NSGraphicsContext restoreGraphicsState]; 

}

回答

0

切換到NSGradient drawInbezierPath修復該問題。

0

我知道你回答了你自己的問題,但我想我會分享爲什麼你的內容正在用上面的代碼消失。

當您使用setClip刪除以前剪輯路徑和跟你的新路徑替換它。這意味着您將結束在髒區域的之外繪製,從而覆蓋先前繪製的內容。

我在自己的閃屏上畫圓角時遇到了同樣的問題,最終找到了一種不同的方式來做我想做的事。

此外,您可以使用clipRect:類的NSBezierPath方法將剪切路徑更改爲現有路徑與要限制繪製的區域的交點。當然,保存並恢復您撥打clipRect:的圖形狀態。