【问题标题】:How to implement HUD-style window like Address Book's "Show in Large Type"如何实现像地址簿的“大字体显示”这样的 HUD 样式窗口
【发布时间】:2011-05-25 17:11:26
【问题描述】:

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

在某处有这种窗口的免费实现吗?

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

【问题讨论】:

    标签: cocoa macos hud


    【解决方案1】:

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

    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-800-MY-APPLE”示例文本。
    • @amrox:嗯,我专门制作了演示 ;-)(实际上,我已经有一个无边框窗口的示例项目,只需要一分钟就可以调整它来做你想要的)。
    • 现在,如果有人能把它做成一个 OSX 服务,你可以通过管道输入一些文本,那就太好了。有一个像这样的应用程序(LargeType 1.0),但它已停产并且下载已被删除(!?)。 NSGod,你准备好了吗?
    • 这太酷了。正是我正在寻找的。与cocoabuilder.com/archive/cocoa/96267-window-transparency.html 搞混了,但我没有比这个有多大帮助。谢谢@NSGod
    • @orangechicken 查看免费提供的 mac 应用程序 Alfred (alfredapp.com)。我将它用于此目的,例如突出显示电话号码和 Cmd-C -> Cmd-Space(我的 Alfred 快捷方式)-> Cmd-V -> Cmd-L ... Voilà
    【解决方案2】:

    感谢您分享此代码。帮了我很多! 您可以添加以下行...

    [self setBackgroundColor:[NSColor clearColor]];
    

    到窗口的初始化函数。这将删除白色角落。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-22
      • 1970-01-01
      相关资源
      最近更新 更多