2012-03-24 115 views
2

我正在创建一个应用程序,我想在用户按下热键时向用户显示“弹出窗口”或“通知”。NSWindow喜欢Quicksilver

我希望将其显示为浮动消息,例如更改音量或亮度时显示的消息,或者像Quicksilver App输入窗口。

我希望它有alpha,淡入,留在那里5-8秒,并淡出。

而......问题是我不知道该如何开始。我试过了:

NSRect frame = NSMakeRect(0, 0, 600, 65); 
_myWindow = [[NSWindow alloc] initWithContentRect:frame 
       styleMask:NSBorderlessWindowMask 
       backing:NSBackingStoreBuffered 
       defer:NO]; 
[_myWindow setBackgroundColor:[NSColor blueColor]]; 
[_myWindow center]; 
[_myWindow makeKeyAndOrderFront:NSApp]; 

但是,这当然不是我想要做的。

欢迎任何帮助;-)

回答

6

我相信这个适当的期限是边框的窗口。水银是开源(https://github.com/quicksilver/Quicksilver),所以你可以看到他们是如何做到这一点,但我已经完成了一个自定义NSWindow子类似的东西:

- (id) initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag 
{ 
    if((self = [super initWithContentRect:contentRect styleMask:NSBorderlessWindowMask backing:bufferingType defer:flag])) { 
     [self setOpaque:NO]; 
     [self setIgnoresMouseEvents:YES]; 
     [self setLevel:NSFloatingWindowLevel]; 
     [self setBackgroundColor:[NSColor clearColor]]; 
    } 

    return self; 
} 

,并通过窗口控制器控制的动画:

- (void) windowDidLoad 
{ 
    CAAnimation *animation = [CABasicAnimation animation]; 
    [animation setDelegate:self]; 
    [[self window] setAnimations:[NSDictionary dictionaryWithObject:animation forKey:@"alphaValue"]]; 
} 

作出类似下面的窗口褪色,代码应工作:

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

[[self window] orderFront:self]; 

我知道这是不是一个即插即用的解决方案,但它应该让你开始。

+0

非常感谢,非常感谢。我会尽力让它以这种方式工作^^。 – 2012-03-24 19:35:16

+0

它只是**工作**! – 2012-03-25 10:08:53