0

画像を表示するカスタム NSView を持つ NSStatusItem があります。メニューが開いているかどうかにかかわらず、次のようにさまざまな画像が表示されます。

 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 を設定します。==> NSProgressIndicator を非表示にして、画像を再度表示します。

どうすればこれを解決できますか?

私を助けてください。ありがとう

4

1 に答える 1

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];
}

ps コードは ARC (自動参照カウント) 用に記述されているため、保持または解放はありません。

于 2012-09-24T20:16:26.397 に答える