2012-07-08 33 views
0

我有一個顯示圖像的自定義NSView的NSStatusItem。 無論菜單打開或者不是顯示不同的圖像就像這樣:NSStatusItem中的NSProgressIndicator

isMenuVisible = NO; 

- (void)awakeFromNib { 

statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength]; 
[statusItem retain]; 

dragStatusView = [[DragStatusView alloc] init]; 
[dragStatusView retain]; 
dragStatusView.statusItem = statusItem; 
[dragStatusView setMenu:statusMenu]; 
[dragStatusView setToolTip:NSLocalizedString(@"Menubar Countdown", 
              @"Status Item Tooltip")]; 
[statusItem setView:dragStatusView]; 
[dragStatusView setTitle:@"11"]; 
} 

- (void)drawImage:(NSImage *)aImage centeredInRect:(NSRect)aRect{ 
NSRect imageRect = NSMakeRect((CGFloat)round(aRect.size.width*0.5f-aImage.size.width*0.5f), 
           (CGFloat)round(aRect.size.height*0.5f-aImage.size.height*0.5f), 
           aImage.size.width, 
           aImage.size.height); 
[aImage drawInRect:imageRect fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0f]; 
} 

- (void)drawRect:(NSRect)rect { 
// Draw status bar background, highlighted if menu is showing 
[statusItem drawStatusBarBackgroundInRect:[self bounds] 
          withHighlight:isMenuVisible]; 




if(isMenuVisible) { 
    [self drawImage:image2 centeredInRect:rect]; 
}else { 
    [self drawImage:image1 centeredInRect:rect]; 

}} 

(當然這並不代表一切,但我希望所有相關的代碼來了解我的問題)

現在我想在此NSView中顯示NSProgressIndicator(在此NSStatusItem中)如果正在進行上載,這意味着 1.在上載開始時設置NSProgressIndicator 2.接收到某些內容? ==>隱藏NSProgressIndicator再次顯示圖像。

我該如何解決這個問題?

請幫幫我。謝謝

+0

沒有人?我希望在這裏找到你能幫助我的人。 – dehlen 2012-07-08 19:40:13

回答

6

這是基於查看的狀態項目的解決方案。

NSStatusBar *bar = [NSStatusBar systemStatusBar]; 
self.theItem = [bar statusItemWithLength:NSVariableStatusItemLength]; 
self.statusView = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 40, 20)]; 
NSProgressIndicator* progress = [[NSProgressIndicator alloc] initWithFrame:NSMakeRect(0, 0, 40, 20)]; 
[progress setIndeterminate:NO]; 
[self.statusView addSubview:progress]; 
self.theItem.view = self.statusView; 

還可以繪製一個進度條,你的自我在菜單基於狀態項
進展情況的變化,你可以簡單地改變你的狀態物品的圖像。

- (void) updateIconWithProgress:(float)aProgress 
{ 
    NSImage* image = [NSImage imageNamed:@"small_icon_16_16.png"]; 
    NSImage* img = [image copy]; 
    [img lockFocus]; 

    NSRect rect = NSMakeRect(2, 4, 12.0*aProgress, 8.0); 
    [[NSColor blueColor] set]; 
    [NSBezierPath fillRect:rect]; 

    [img unlockFocus]; 
    [self.theItem setImage:img]; 
} 

p.s.該代碼是爲ARC(自動引用計數)編寫的,因此不存在保留或釋放。