2

我正在研究 NSStatusItem。我已经设法使用 setImage 和 setAlternateImage 来工作。当用户选择某物时,它需要一段时间才能完成它正在做的任何事情。当它在做某事时,我尝试从通常的 Image 更改为 spinner。我现在这样做的方式是创建一个视图,将 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;
}
4

2 回答 2

1

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

于 2013-03-11T20:32:08.947 回答
0

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

于 2011-10-09T13:21:04.690 回答