2012-02-29 55 views
3

我有NSWindow自定義圖形的無國界的子帶圓角:意外邊境自定義圖形

MyCustomWindow

- (id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)windowStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)deferCreation 
{ 
    self = [super initWithContentRect:contentRect styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:NO]; 
    if (self) { 
     // Start with no transparency for all drawing into the window 
     [self setAlphaValue:1.0]; 
     // Turn off opacity so that the parts of the window that are not drawn into are transparent. 
     [self setOpaque:NO]; 
     [self setMovableByWindowBackground:YES]; 
    } 
    return self; 
} 

- (BOOL) canBecomeKeyWindow 
{ 
    return YES; 
} 

MyCustomView

- (void)drawRect:(NSRect)rect { 
    [[NSColor clearColor] set]; 
    NSRectFill([self frame]); 
    [backgroundImage compositeToPoint:NSZeroPoint operation:NSCompositeSourceOver]; 
} 

然而,每隔一段時間(也許1/10)當我啓動應用程序時,圖形看起來不對,因爲我在窗口周圍出現灰色的一個像素方形邊框。它不是圍繞我的自定義圖形設置的,而是圍繞窗口框架設置的,這意味着它會消除我的圓角。

在我的子類中是否有我缺少的東西?

編輯: 這是問題的一個截圖:

enter image description here

+0

似乎我有同樣的問題,我弄明白了。看到這裏:http://stackoverflow.com/questions/9124349/grey-border-around-view-when-using-nsborderlesswindowmask – 2012-07-06 06:14:01

+0

你有沒有想過這個?我也有同樣的問題。 – sam 2013-06-03 23:16:11

+0

對不起,山姆,我沒有。我最終使用了一個較少定製的設計,窗口邊緣保持標準。 – pajevic 2013-06-04 08:50:21

回答

0

您需要的背景顏色設置爲透明色。添加到您的MyCustomWindow

[self setBackgroundColor:[NSColor clearColor]]; 

MyCustomWindow應該是這樣的:

- (id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)windowStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)deferCreation 
{ 
    self = [super initWithContentRect:contentRect styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:NO]; 
    if (self) { 
     // Start with no transparency for all drawing into the window 
     [self setAlphaValue:1.0]; 

     [self setBackgroundColor:[NSColor clearColor]]; 

     // Turn off opacity so that the parts of the window that are not drawn into are transparent. 
     [self setOpaque:NO]; 
     [self setMovableByWindowBackground:YES]; 
    } 
    return self; 
} 

- (BOOL) canBecomeKeyWindow 
{ 
    return YES; 
} 

UPDATE:

嘗試編輯您的drawRect:

替換它與:

- (void)drawRect:(NSRect)rect { 
    NSBezierPath * path; 
    path = [NSBezierPath bezierPathWithRoundedRect:rect xRadius:6 yRadius:6]; 
    [[NSColor redColor] set]; 
    [path fill]; 

    /* If this example will help You. Replace redColor to clearColor and use this instead RectFill */ 
} 

*也在你MyCustomWindow添加[自setBackgroundColor:[NSColor clearColor];我所說的耳語。

仍有邊框?

這對我有用。

+0

嗨,賈斯汀。感謝您的答覆。不幸的是,你的建議並沒有解決問題。 – pajevic 2012-02-29 10:04:07

+0

嗯..應該工作。也許你可以添加屏幕截圖,以更清楚地瞭解什麼是錯的。 – 2012-02-29 10:12:51

+0

我現在已經添加了問題的屏幕截圖。 – pajevic 2012-02-29 10:26:03