在NSStatusItem中显示NSProgressIndicatorSpinningStyle然后隐藏它

时间:2011-02-21 08:00:26

标签: cocoa macos nsstatusitem nsprogressindicator

我正在研究NSStatusItem。我设法使用setImage和setAlternateImage工作。 当用户选择某些东西时,它需要一段时间才能完成它正在做的任何事情。虽然它正在做某事,但我尝试从通常的Image变为微调器。我现在这样做的方式是我创建了一个视图,将NSProgressIndicator设置为它,然后使用

[statusItem setView: viewWithSpinner];

它似乎工作,直到我尝试删除它并显示原始图像。我可以隐藏它的唯一方法是

[statusItem setView: nil];

但这打破了一切,原始图像不会回来。我猜因为没有更多的观点。在设置viewWithSpinner之前,我似乎无法保存原始视图。

有人可以告诉我一种实现这个目标的方法吗?

因此...

NSStatusItem *myStatusItem;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
[myStatusItem setImage:statusImage];
[myStatusItem setHighlightMode:YES];
[myStatusItem setAlternateImage:statusImageSel];
[myStatusItem setMenu:myStatusMenu];
etc...
[self createSpinner];
}

-(void)createSpinner
{
//to overcome the white border problem

NSView *progressIndicatorHolder = [[NSView alloc] init];

NSProgressIndicator *progressIndicator = [[NSProgressIndicator alloc] init];

[progressIndicator setBezeled: NO];
[progressIndicator setStyle: NSProgressIndicatorSpinningStyle];
[progressIndicator setControlSize: NSSmallControlSize];
[progressIndicator sizeToFit];
[progressIndicator setUsesThreadedAnimation:YES];

[progressIndicatorHolder addSubview:progressIndicator];

[progressIndicator startAnimation:self];

//for testing purposes
[[myStatusItem view] addSubview:progressIndicatorHolder];

spinnerView = progressIndicatorHolder;
}

2 个答案:

答案 0 :(得分:1)

我建议在设置为任何其他视图之前使用[statusItem视图]保存旧视图。在返回普通菜单之前,使用setView方法将旧保存的视图设置为statusItem。

答案 1 :(得分:0)

如果您想隐藏NSStatusItem视图,只需致电[yourStatusItem setLength:0]