2012-03-24 91 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