为MAAttachedWindow淡入/淡出

时间:2009-10-10 18:20:07

标签: objective-c cocoa fade nswindow

我正在使用Matt Gemmell的MAAttachedWindow(http://mattgemmell.com/source)和NSStatusItem在菜单栏中显示自定义视图。我很困惑如何让它淡入淡出。通常我会做这样的事情:

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

并淡出:

[[window animator] setAlphaValue:0.0];

但是这个代码似乎对MAAttachedWindow没有影响。有什么想法吗?

由于

2 个答案:

答案 0 :(得分:9)

很抱歉打破了一个旧帖子,但我认为值得一提的是,我可以直接设置alpha值,而无需添加访问者/获取者。

简单地做(取决于您的设置或课程):

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

工作得很好。

答案 1 :(得分:5)

我对CoreAnimation和隐式动画的使用并不是特别精通。但是,我能够通过向MAAttachedWindow类添加一个显式的alphaValue属性来使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];
}
...

通过添加,我能够获得setAlphaValue的隐式动画:

(以下代码来自Matt的样本“NSStatusItemTest”代码)

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

我不确定为什么明确定义alphaValue属性有效。我希望可以为隐式动画调用NSWindow的继承版本。但它似乎并不存在。