Vic*_*scó 2 cocoa window objective-c
我正在创建一个应用程序,我想在按热键时向用户显示"弹出"或"通知".
我希望它显示为浮动消息,如更改音量或亮度时显示的消息,或者像Quicksilver App输入窗口一样.
我希望它有阿尔法,淡入,在那里停留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];
Run Code Online (Sandbox Code Playgroud)
但是,当然这不是我想要做的.
欢迎任何帮助;-)
我认为适当的术语是挡板窗口.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;
}
Run Code Online (Sandbox Code Playgroud)
以及由窗口控制器控制的动画:
- (void) windowDidLoad
{
CAAnimation *animation = [CABasicAnimation animation];
[animation setDelegate:self];
[[self window] setAnimations:[NSDictionary dictionaryWithObject:animation forKey:@"alphaValue"]];
}
Run Code Online (Sandbox Code Playgroud)
要使窗口淡入,代码类似于以下应该工作:
[[self window] setAlphaValue:0.0];
[[[self window] animator] setAlphaValue:1.0];
[[self window] orderFront:self];
Run Code Online (Sandbox Code Playgroud)
我意识到这不是一个即插即用的解决方案,但它应该让你开始.
| 归档时间: |
|
| 查看次数: |
627 次 |
| 最近记录: |