包括内置通讯簿在内的多个应用程序使用半透明的 HUD 窗口,并带有较大的阴影文本。我想在我的 Cocoa Mac 应用程序中实现类似的窗口。
是否有此类窗口的免费实现?
如果没有,最好的实现方法是什么?
最佳答案
这是一个示例项目,展示了如何做到这一点:
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
子类即可。 (使用大纲 View 模式并单击显示三角形以在 nib 文件中的窗口图标内显示嵌套的 NSView
)。同样,虽然 View 在 Interface Builder 中看起来很普通,但在运行时看起来还不错。
然后只需在 View 顶部放置一个 NSTextField
并相应地设置文本即可。
请注意,一般来说,无边框窗口不容易使用(例如,如果您希望能够拖动窗口,则需要自己重新添加该功能)。例如,Apple 有一些关于如何允许拖动的示例代码。
关于cocoa - 如何实现像地址簿 "Show in Large Type"这样的HUD风格的窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4446878/