如何在Mac OSX上使用Cocoa创建类似OSD的窗口?

时间:2010-12-21 18:41:31

标签: cocoa

请记住,我是一个真正的新手Cocoa开发者

场景:我已经搜索了从开始到文档重新开始的时间,即所谓的“环绕”。

当我进行换行时,我想在屏幕上显示一段闪烁的窗口(一秒钟??)和OSD(屏幕显示)控制窗口,TextWrangler和XCode在文本搜索从开始重新启动时执行此操作

如何实现类似的窗口?

1 个答案:

答案 0 :(得分:3)

实现视图来做到这一点会相对简单。 NSView子类中的以下代码将显示部分透明的圆形rect,当放置在窗口中时忽略事件。

- (void)drawRect:(NSRect)dirtyRect {
    [[NSColor colorWithDeviceWhite:0 alpha:.7] set];
    [[NSBezierPath bezierPathWithRoundedRect:self.bounds xRadius:10 yRadius:10] fill];
    //Additional drawing
}
- (NSView *)hitTest:(NSPoint)aPoint {
    return nil;
}
- (BOOL)acceptsFirstResponder {
    return NO;
}
- (BOOL)isOpaque {
    return NO;
}

如果您确实想在窗口中执行此操作,则需要创建无边框,不透明窗口并将其设置为内容视图。此外,您需要让视图在drawRect:方法的开头用一个清晰​​的颜色填充它的边界。

//Create and display window
NSPanel *panel = [[NSPanel alloc] initWithFrame:NSMakeRect(0,0,300,200) styleMask:NSBorderlessWindowMask|NSNonactivatingPanelMask backing:NSBackingStoreBuffered defer:YES];
[panel setOpaque:NO];
MyViewSubview *view = [MyViewSubview new];
[panel setContentView:view];
[view release];
[p setLevel:NSScreenSaverWindowLevel];
[p orderFront:nil];

//Add these two lines to the beginning of the drawRect: method
[[NSColor clearColor set];
NSRectFill(self.bounds);

但是,此窗口将拦截事件,我无法使用标准方法禁用此功能。

要淡化视图,请查看NSViewAnimation或使用NSTimer对象并手动执行。