2013-12-23 26 views
2

我有NSWindow繪製到透明目的地會導致拉絲工件

_window = [[NSWindow alloc] init]; 
[_window setOpaque:NO]; 
[_window setBackgroundColor:[NSColor clearColor]]; 
[_window setStyleMask:NSBorderlessWindowMask]; 

我有作爲其內容查看我的自定義視圖(無層):

[_window setContentView:[[MyCustomView alloc] init]]; 

以我的自定義視圖我的drawRect:創建看起來像系統彈出窗口並填充顏色的貝塞爾路徑。

- (void)drawRect:(NSRect)dirtyRect 
{ 
    [NSGraphicsContext saveGraphicsState]; 
    [super drawRect:self.bounds]; 
    NSBezierPath *path = [self bodyShape]; 
    [self.backgroundColor setFill]; 
    [path fill]; 
    [NSGraphicsContext restoreGraphicsState]; 
} 

,直到我動酥料餅的地方指標都看起來不錯first time popover shows
。在窗口中重繪出現文物後,我的自定義視圖的drawRect:繪製了內容drawing with artifacts
下次繪製內容時,這個白色三角形(見上圖)停留在窗口中的同一位置並隨窗口移動。 Artifact moves with window
如果我添加到我的視圖圖層 - 所有看起來都沒問題,但我無法添加圖層。
如果我用一些純色填充我的視圖,則沒有神器。 Fill with solid color
我建議Cocoa緩存第一個位圖。但我不確定爲什麼會發生這種情況,以及如何解決這個問題。也許有人知道爲什麼如何解決它? 謝謝。

回答

2

我找到了!問題在於窗口緩存陰影指示器周圍的陰影。我通過調用invalidateShadow方法NSWindow來修復它。