MAAttachedWindow的淡入淡出效果

7

我正在使用Matt Gemmell的MAAttachedWindow (http://mattgemmell.com/source)与NSStatusItem一起,在菜单栏中显示自定义视图。我不知道如何使其淡入和淡出。通常,我会这样做:

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

并且淡出:

[[window animator] setAlphaValue:0.0];

然而,这段代码似乎对MAAttachedWindow没有影响。有什么想法吗?
谢谢。
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];

运行良好。


我也可以用,你不需要修改 MAAttachedWindow 类。也许他在某个时候更新了源代码? - leecbaker

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的继承版本会在隐式动画中被调用。但事实并非如此。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接