繁体   English   中英

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

[英]Displaying NSProgressIndicatorSpinningStyle in NSStatusItem and then hiding it

我正在研究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;
}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM