2009-10-10 11 views
7

Używam MAAttachedWindow Matta Gemmell (http://mattgemmell.com/source) z NSStatusItem do wyświetlania niestandardowego widoku na pasku menu. Nie wiem, jak zmusić go do zniknięcia i zanikać. Normalnie zrobiłbym coś takiego:Fade in/Fade out dla MAAttachedWindow

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

i fade out:

[[window animator] setAlphaValue:0.0]; 

kod ten jednak wydaje się nie mieć efektu MAAttachedWindow. Jakieś pomysły?

Dzięki

Odpowiedz

5

Nie jestem szczególnie dobrze zorientowani w CoreAnimation i wykorzystanie ukrytych animacje. Jednak udało mi się uzyskać MAAttachedWindow zanikać w dodając wyraźne właściwości alphaValue do klasy 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]; 
} 
... 

Dodając, że udało mi się uzyskać niejawny animacji dla setAlphaValue pracować:

(poniżej kodu żłobienia od Matta Przykładowy „NSStatusItemTest” kodu)

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

nie jestem pewien, dlaczego jednoznacznie określające prace własności alphaValue. Spodziewam się, że odziedziczona wersja z NSWindow zostanie wywołana dla niejawnej animacji. Nie wydaje się jednak.

+0

Wielkie dzięki :-) Spróbuje – indragie

+0

Działa idealnie. Jeszcze raz dziękuję – indragie

9

Przepraszam, że podaję stary post, ale pomyślałem, że warto wspomnieć, że działa dobrze dla mnie, aby ustawić wartość alfa bezpośrednio, bez potrzeby dodawania akcesorów/modułów pobierających.

prostu robi (w zależności od konfiguracji, czy kurs):

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

działa dobrze.

+0

Działa również dla mnie - w ogóle nie powinieneś modyfikować klasy MAAttachedWindow. Może w pewnym momencie zaktualizował źródło? – leecbaker