cocoa - 如何实现像地址簿 "Show in Large Type"这样的HUD风格的窗口

标签 cocoa macos hud

包括内置通讯簿在内的多个应用程序使用半透明的 HUD 窗口,并带有较大的阴影文本。我想在我的 Cocoa Mac 应用程序中实现类似的窗口。

screenshot

是否有此类窗口的免费实现?

如果没有,最好的实现方法是什么?

最佳答案

这是一个示例项目,展示了如何做到这一点:

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 有一些关于如何允许拖动的示例代码。

alt text

关于cocoa - 如何实现像地址簿 "Show in Large Type"这样的HUD风格的窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4446878/

相关文章:

cocoa - 比较日期,警告从独特的 Objective-C 类型传递参数之一 'compare:'

unity-game-engine - 统一创建 3D HUD

ios - 如何获取周一、周二等工作日的本地化字符串表示形式?

xcode - 如何折叠 Xcode 问题导航器中的所有问题

android - Mac 上的 debug.keystore 在哪里?

java - 在 MacOS 上的 AdoptOpenJDK 上链接 JNA 库时出错

objective-c - Mac OSX 覆盖

iphone - 多行 HUD

cocoa - 如何在 mac os x 中获得 float 窗口

objective-c - 获取任意类的类方法列表