7

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

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

并淡出:

[[window animator] setAlphaValue:0.0];

但是,此代码似乎对 MAAttachedWindow 无效。有任何想法吗?

谢谢

4

2 回答 2

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

工作得很好。

于 2011-02-25T19:08:06.240 回答
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 继承的版本将被调用用于隐式动画。它似乎没有。

于 2009-10-19T22:29:52.417 回答