Cocoa 在NSStatusItem中显示NSProgressIndicatorSpiningStyle,然后将其隐藏

Cocoa 在NSStatusItem中显示NSProgressIndicatorSpiningStyle,然后将其隐藏,cocoa,macos,nsstatusitem,nsprogressindicator,Cocoa,Macos,Nsstatusitem,Nsprogressindicator,我正在处理这个项目。我已经设法使用setImage和setAlternateImage来工作。 当用户选择某样东西时,它需要一段时间来完成它正在做的任何事情。当它正在做一些事情时,我试着从通常的图像改为旋转器。我现在的做法是创建一个视图,将NSProgressIndicator设置为该视图,然后使用 [statusItem setView: viewWithSpinner]; 在我尝试移除它并显示原始图像之前,它似乎一直在工作。我能隐藏它的唯一方法就是 [statusItem setView:

我正在处理这个项目。我已经设法使用setImage和setAlternateImage来工作。 当用户选择某样东西时,它需要一段时间来完成它正在做的任何事情。当它正在做一些事情时,我试着从通常的图像改为旋转器。我现在的做法是创建一个视图,将NSProgressIndicator设置为该视图,然后使用

[statusItem setView: viewWithSpinner];
在我尝试移除它并显示原始图像之前,它似乎一直在工作。我能隐藏它的唯一方法就是

[statusItem setView: nil];
但这破坏了一切,原始图像不会回来。我想是因为没有更多的风景了。在设置viewWithSpinner之前,我似乎无法保存原始视图

有人能给我一个实现这一点的方法吗

所以


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

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

不替换status item视图,而是将微调器视图添加为子视图如何?我尝试了[[statusItem view]addSubview:viewWithSpinner];但是微调器没有出现。显示用于创建
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;
}