2009-10-10 20 views
7

Estoy usando la ventana MAAttachedWindow (http://mattgemmell.com/source) de Matt Gemmell con un NSStatusItem para mostrar una vista personalizada en la barra de menú. Estoy confundido sobre cómo hacer que se desvanezca y se desvanezca. Normalmente me gustaría hacer algo como esto:Fade in/Fade out for MAAttachedWindow

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

y a desaparecer:

[[window animator] setAlphaValue:0.0]; 

Sin embargo este código parece tener ningún efecto con MAAttachedWindow. ¿Algunas ideas?

Gracias

Respuesta

5

No estoy especialmente bien versado en CoreAnimation y el uso de animaciones implícitas. Sin embargo, yo era capaz de obtener el MAAttachedWindow a desvanecerse en añadiendo una propiedad explícita AlphaValue a la clase 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]; 
} 
... 

mediante la adición de eso, yo era capaz de conseguir la animación implícita para setAlphaValue al trabajo:

(por debajo de código cribbed el ejemplo de código "NSStatusItemTest" de Matt)

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

no estoy seguro de por qué la definición explícita de las obras de propiedad AlphaValue. Esperaría que la versión heredada de NSWindow se invoque para la animación implícita. Aunque parece que no.

+0

Muchas gracias :-) Lo intentaré – indragie

+0

Funciona perfectamente. Gracias de nuevo – indragie

9

Perdón por hacer una publicación anterior, pero pensé que valía la pena mencionar que funciona bien para mí establecer el valor alfa directamente, sin necesidad de añadir accesadores/getters.

Simplemente haciendo (dependiendo de su configuración, o curso):

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

funciona bien.

+0

Funciona para mí también, no debería necesitar modificar la clase MAAttachedWindow. Tal vez él actualizó la fuente en algún momento? – leecbaker