2009-10-10 19 views
7

Sto utilizzando MAAttachedWindow di Matt Gemmell (http://mattgemmell.com/source) con un NSStatusItem per visualizzare una visualizzazione personalizzata nella barra dei menu. Sono confuso su come farlo svanire e svanire. Normalmente mi piacerebbe fare qualcosa di simile:Fade in/Fade out per MAAttachedWindow

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

e fade out:

[[window animator] setAlphaValue:0.0]; 

Tuttavia questo codice sembra non avere effetto con MAAttachedWindow. Qualche idea?

Grazie

risposta

5

non sto particolarmente esperto in Core Animation e l'utilizzo di animazioni implicite. Tuttavia, sono stato in grado di ottenere il MAAttachedWindow a svanire in con l'aggiunta di una proprietà esplicita alphaValue alla classe MAAttachedWindow:

@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]; 
} 
... 

aggiungendo che, sono stato in grado di ottenere l'animazione implicito per setAlphaValue al lavoro:

(di seguito il codice cribbed dal codice di esempio "NSStatusItemTest" di Matt)

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

io non sono sicuro perché definire esplicitamente le opere di proprietà alphaValue. Mi aspetto che la versione ereditata da NSWindow venga invocata per l'animazione implicita. Non sembra però.

+0

Molte grazie :-) Proveremo – indragie

+0

Funziona perfettamente. Grazie ancora – indragie

9

Mi dispiace di aver scaricato un vecchio post, ma ho pensato che valesse la pena ricordare che funziona perfettamente per me impostare il valore alfa direttamente, senza bisogno di aggiungere accessor/getter.

Semplicemente facendo (a seconda della configurazione, o corso):

[[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]; 

funziona bene.

+0

Funziona anche per me: non dovresti modificare la classe MAAttachedWindow. Forse ha aggiornato la fonte ad un certo punto? – leecbaker

Problemi correlati