2009-12-31 77 views
0

我正在爲我的應用程序實現選項卡。一切都運轉良好,除非我無法弄清楚如何在窗口退出主要狀態時在較淺的灰色陰影中繪製選項卡。我正在成功接收NSWindowDidBecomeMainNotification並重新繪製標籤欄,但我不確定如何計算標籤的新灰色。我目前正在使用所有圖形的圖像。我試圖在整個標籤欄上方繪製一個半透明圖層,使其更輕,但它似乎不起作用。我可以爲我使用的每張圖片設置一個不透明度值,但這看起來不太理想。我也無法在Apple文檔中找到關於此的任何信息。這種情況下的最佳做法是什麼?在NSView中繪製選項卡

回答

2

你可以做的是讓選項卡在代碼中繪製,然後根本不繪製背景。讓窗口的背景,活動或不活動,顯示通過。

您可能還會考慮切換到PSMTabBarControl,這是一個可重複使用的標籤欄類,已在多個應用程序中編寫和使用。 (並且我認爲你已經將NSTabView視爲不是你想要的外觀。)

+0

我不明白你的意思。窗戶的內部區域是否具有變化的顏色?儘管你的回答確實給了我一個主意。我想知道是否可以繼承工具欄,因爲它會改變顏色。我已經有了一個工具欄。一個窗口可以有多個工具欄? 我最初使用PSMTabBarControl,除了它不完全是我所需要的,所以我正在修改他的源代碼,不知道我在做什麼。我想它已經變成了製造錯誤的祕訣,所以我放棄了船。 – calvinlough 2010-01-02 05:17:02

+0

我的意思是編寫繪圖代碼,而不是在單獨的應用程序中繪製選項卡,並在您的應用程序中加載PDF文件(或更糟糕的是,柵格圖像),並且在此繪圖代碼中不要繪製背景。 – 2010-01-02 05:27:58

+0

是的,一個窗口具有背景色,但您可能不需要訪問它,只要您的選項卡是圖形資源,它就根本無法幫助您。不,窗口不能有多個工具欄;而且,標籤欄無論如何不是一個工具欄。分開的工作,分開的意見。 – 2010-01-02 05:29:31

0

我做非活動控件的方式是在我的圖形程序(Photoshop或Illustrator)中呈現相同圖形的非活動狀態版本,並在需要時繪製非活動版本。如果您繪製活動圖像的50%透明版本,則需要先使用背景顏色進行擦除。

+0

關於使用Photoshop:當UI比例因子改變時,柵格圖像不能很好地縮放。目前*這種情況並沒有發生,但蘋果一直暗示着一些操作系統版本將在一天內改變。我預測,使用矢量編輯器或代碼繪製(不透明度可以將圖像作爲Quartz繪圖代碼導出)將得到回報。 – 2010-01-01 14:31:58

+0

確實,位圖或光柵圖像不會獨立於分辨率,但仍然沒有使用該功能的發貨產品。我所做的是有原始的矢量繪圖,我可以保存在PDF或更高分辨率的光柵格式,屆時。對於我的一個發貨應用程序,PNG的分辨率爲4x。 – lucius 2010-01-01 20:05:33

0

你可以嘗試使用半透明遮罩來繪製圖像。我通常使用的代碼只是繪製圖像,然後使用Quartz的Transparency Layer功能在圖像的實際邊界上填充矩形。我這樣做是爲NSImage中上一個類別:

@implementation NSImage (ShadedImageAddition) 
- (void)drawAtPoint:(NSPoint)point shadeWithColor:(NSColor *)color intensity:(CGFloat)alpha 
{ 
    NSRect imageRect; 
    CGContextRef context = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort]; 

    imageRect.origin = point; 
    imageRect.size = [self size]; 

    CGContextBeginTransparencyLayerWithRect(context, NSRectToCGRect(imageRect), NULL); 

    [self drawInRect:imageRect fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0]; 
    [[color colorWithAlphaComponent:alpha] setFill]; 
    NSRectFillUsingOperation(imageRect, NSCompositeSourceAtop); 

    CGContextEndTransparencyLayer(context); 
} 
@end 

然後,當圖像是在非重要窗口,可以得出,我一般在50%繪製一個白色口罩過它。當然,你必須選擇一個顏色和alpha值,你的位圖看起來不錯。

[myImage drawAtPoint:NSZeroPoint shadeWithColor:[NSColor whiteColor] intensity:0.50];