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

我希望将其显示为浮动消息,例如更改音量或亮度时出现的消息,或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];


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

欢迎任何帮助;-)

最佳答案

我相信适当的术语是挡板窗口。 Quicksilver是开放源代码(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];


我意识到这不是即插即用的解决方案,但它应该可以帮助您入门。

关于objective-c - NSWindow像Quicksilver,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9851579/

10-09 16:32