首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >像Quicksilver这样的NSWindow

像Quicksilver这样的NSWindow
EN

Stack Overflow用户
提问于 2012-03-24 20:04:31
回答 1查看 632关注 0票数 2

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

我希望它以浮动消息的形式显示,就像您更改音量或亮度时出现的消息一样,或者像Quicksilver应用程序输入窗口一样。

我希望它有alpha,淡入,停留5-8秒,然后淡出。

还有..。问题是,我不知道如何开始使用它。我试过了:

代码语言:javascript
复制
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];

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

欢迎任何帮助;-)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-24 21:59:28

我认为合适的术语是挡板窗口。Quicksilver是开源的(https://github.com/quicksilver/Quicksilver),所以您可以看到他们是如何做到这一点的,但我已经用一个自定义的Quicksilver子类完成了类似的操作:

代码语言:javascript
复制
- (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;
}

以及由窗口控制器控制的动画:

代码语言:javascript
复制
- (void) windowDidLoad
{
    CAAnimation *animation = [CABasicAnimation animation];
    [animation setDelegate:self];
    [[self window] setAnimations:[NSDictionary dictionaryWithObject:animation forKey:@"alphaValue"]];
}

要使窗口淡入,应使用与以下代码类似的代码:

代码语言:javascript
复制
[[self window] setAlphaValue:0.0];
[[[self window] animator] setAlphaValue:1.0];

[[self window] orderFront:self];

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

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9851579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档