7

I'm using Matt Gemmell's MAAttachedWindow (http://mattgemmell.com/source) with an NSStatusItem to display a custom view in the menu bar. I'm confused as to how to get it to fade in and fade out. Normally I'd do something like this:

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

and to fade out:

[[window animator] setAlphaValue:0.0];

However this code seems to have no effect with MAAttachedWindow. Any ideas?

Thanks

indragie
  • 18,002
  • 16
  • 95
  • 164

2 Answers2

9

Sorry to drudge up an old post, but I thought it worthwhile mentioning that it works just fine for me to set the alpha value directly, with no need to add accessors/getters.

Simply doing (depending on your setup, or course):

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

Works just fine.

sudo rm -rf
  • 29,408
  • 19
  • 102
  • 161
  • Works for me as well- you shouldn't need to modify the MAAttachedWindow class at all. Maybe he updated the source at some point? – leecbaker Nov 17 '11 at 23:39
5

I'm not especially well versed in CoreAnimation and the usage of implicit animations. However, I was able to get the MAAttachedWindow to fade in by adding an explicit alphaValue property to the MAAttachedWindow class:

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

By adding that, I was able to get the implicit animation for setAlphaValue to work:

(below code cribbed from Matt's Sample "NSStatusItemTest" code)

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

I am not sure why explicitly defining the alphaValue property works. I would expect the inherited version from NSWindow would be invoked for the implicit animation. It doesn't appear to though.

Michael Lamb
  • 242
  • 1
  • 6