多个应用程序(包括内置通讯簿)使用半透明的HUD窗口,带有大阴影文本。我想在我的Cocoa Mac应用程序中实现一个类似的窗口。
在某处可以自由实现这种窗口吗?
如果没有,实施它的最佳方法是什么?
答案 0 :(得分:23)
这是一个展示如何操作的示例项目:
http://github.com/NSGod/BlackBorderlessWindow
基本上,您需要创建无边界NSWindow
子类。最简单的方法是在nib文件中设置窗口大小和排列,然后将其类设置为自定义子类。因此,虽然它仍然看起来像Interface Builder中的普通窗口,但在运行时它将显示为您需要它。
@implementation MDBorderlessWindow
- (id)initWithContentRect:(NSRect)contentRect
styleMask:(NSUInteger)windowStyle
backing:(NSBackingStoreType)bufferingType
defer:(BOOL)deferCreation {
if (self = [super initWithContentRect:contentRect
styleMask:NSBorderlessWindowMask
backing:NSBackingStoreBuffered defer:deferCreation]) {
[self setAlphaValue:0.75];
[self setOpaque:NO];
[self setExcludedFromWindowsMenu:NO];
}
return self;
}
alpha值会使窗口半透明。
此外,您可以创建一个自定义NSView
子类,它将绘制一个圆角矩形:
@implementation MDBlackTransparentView
- (id)initWithFrame:(NSRect)frame {
if (self = [super initWithFrame:frame]) {
}
return self;
}
- (void)drawRect:(NSRect)frame {
NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect:frame
xRadius:6.0 yRadius:6.0];
[[NSColor blackColor] set];
[path fill];
}
@end
与窗口一样,您只需将窗口的contentView类设置为自定义NSView
子类。 (使用大纲视图模式并单击显示三角形以在nib文件中的窗口图标内显示嵌套的NSView
)。同样,虽然视图在Interface Builder中看起来很普通,但在运行时它看起来还不错。
然后只需在视图顶部放置NSTextField
并相应地设置文字。
请注意,通常,无边界窗口不易使用(例如,如果您希望能够拖动窗口,则需要自己添加该功能)。例如,Apple提供了一些关于如何允许拖动的示例代码。
答案 1 :(得分:3)
感谢您分享此代码。帮了我很多忙! 您可以添加以下行...
[self setBackgroundColor:[NSColor clearColor]];
到窗口的init函数。这将删除白色角落。