2012-07-08 2 views
0

NSStatusItem에 이미지를 보여주는 NSView가 있습니다.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 (이 NSStatusItem에 있음)에 NSProgressIndicator를 표시합니다. 1. 업로드 시작시 NSProgressIndicator를 설정하십시오. 2. 수신을 원하십니까? ==> NSProgressIndicator를 숨기면 이미지가 다시 표시됩니다.

어떻게 해결할 수 있습니까?

도와주세요. 감사합니다

+0

아무도 없습니까? 나는 네가 나를 도울 수있는 누군가를 찾고 싶다. – dehlen

답변

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 (Automatic Reference Counting)를 위해 작성되었으므로 유지 또는 릴리스가 없습니다.

관련 문제