2

私はNSStatusItemに取り組んでいます。setImage と setAlternateImage を使用して動作させることができました。ユーザーが何かを選択すると、それが何をしているのかを達成するのに時間がかかります。何かをしている最中に、いつもの画像からスピナーに変えてみました。私が今やっている方法は、ビューを作成し、それに 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 ビュー] を使用して古いビューを保存することをお勧めします。通常のメニューに戻る前に、setView メソッドを使用して、古い保存ビューを statusItem に設定します。

于 2013-03-11T20:32:08.947 に答える
0

NSStatusItem ビューを非表示にするだけの場合は、 を呼び出すだけ[yourStatusItem setLength:0]です。

于 2011-10-09T13:21:04.690 に答える