2009-10-10 4 views
7

私はメニューバーにカスタムビューを表示するためにNSStatusItemを使用してMatt GemmellのMAAttachedWindow(http://mattgemmell.com/source)を使用しています。フェードインとフェードアウトの仕方については混乱しています。通常、私はこのような何かしたい:MAAttachedWindowのフェードイン/フェードアウト

[window makeKeyAndOrderFront:self]; 
[[window animator] setAlphaValue:1.0]; 

をしてフェードアウトする:

[[window animator] setAlphaValue:0.0]; 

をしかし、このコードはMAAttachedWindowと効果がないようです。何か案は?

おかげ

答えて

5

私は特によくCoreAnimationと暗黙的なアニメーションの使用に精通していませんよ。

を:setAlphaValueが動作するために、私は暗黙のアニメーションを取得することができたことを追加することで

@interface MAAttachedWindow : NSWindow { 
    CGFloat _alphaValue; 
... 
} 
-(CGFloat) alphaValue; 
-(void) setAlphaValue:(CGFloat)windowAlpha; 
... 

@implementation MAAttachedWindow 

- (CGFloat) alphaValue { 
return _alphaValue; 
} 

- (void) setAlphaValue:(CGFloat)windowAlpha { 
    _alpha = windowAlpha; 
[super setAlphaValue:windowAlpha]; 
} 
... 

:しかし、私はMAAttachedWindowクラスに明示的なalphaValueプロパティを追加することにより、フェードインするMAAttachedWindowを取得することができました

(コードの下にマットのサンプル「NSStatusItemTest」コードからcribbed)

- (void)toggleAttachedWindowAtPoint:(NSPoint)pt 
{ 
... 
    [attachedWindow makeKeyAndOrderFront:self]; 
[[attachedWindow animator] setAlphaValue:1.0]; 

明示的alphaValueプロパティの作品を定義する理由は、私はわかりません。 NSWindowの継承バージョンが暗黙のアニメーションのために呼び出されると私は期待しています。しかし、それは現れない。

+0

多くのおかげで:-)試してみます – indragie

+0

完全に動作します。もう一度ありがとう – indragie

9

古い投稿を残念に思ってしまいましたが、アクセサー/ゲッターを追加する必要がなく、アルファ値を直接設定するだけでうまく動作することに言及しておく価値があると思いました。だけで正常に動作し

[[self window] addChildWindow:attachedWindow ordered:NSWindowAbove]; 
[attachedWindow setAlphaValue:0.0]; 

[NSAnimationContext beginGrouping]; 
[[NSAnimationContext currentContext] setDuration:0.5]; 
[attachedWindow makeKeyAndOrderFront:self]; 
[[attachedWindow animator] setAlphaValue:1.0]; 
[NSAnimationContext endGrouping]; 

だけ(セットアップ、またはコースに応じて)やって。

+0

私のためにも動作します。MAAttachedWindowクラスをまったく変更する必要はありません。たぶん彼はある時点でソースを更新しましたか? – leecbaker

関連する問題