【问题标题】:Custom user interface object自定义用户界面对象
【发布时间】:2011-07-16 11:19:08
【问题描述】:

我该如何做这样的“通知面板”

【问题讨论】:

  • 我认为这是 chrome 桌面通知检查 google chrome API
  • 这不是 chrome 通知。这是仪表板中的 wiget。

标签: objective-c macos user-interface xcode4


【解决方案1】:

在界面生成器中制作 HUD 面板?还是一个带纹理的窗口并将其纹理设置为您想要的?

【讨论】:

    【解决方案2】:

    首先你需要一个不透明的无边框窗口:

    NSPanel *window = [[NSPanel alloc] initWithContentRect:windowFrame styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:YES];
    [window setOpaque:NO];
    [window setBackgroundColor:[NSColor clearColor]];
    

    推荐使用 NSPanel,因为它只有在需要时才能成为 key(参见setBecomesKeyOnlyIfNeeded) 如果您需要在该窗口中进行一些用户交互,您还需要拥有 NSPanel 的自定义子类并覆盖 canBecomeKeyWindow

    然后您可以在 xib 中布局您的内容视图或创建NSView 的自定义子类来表示您的窗口的内容视图并将其设置为自定义窗口:

    [window setContentView:<your content view>];
    

    最后在屏幕上显示窗口:

    [window makeKeyAndOrderFront:nil];
    

    如果您希望您的窗口出现在任何其他窗口之上,您可以使用 NSWindow 类的 windowLevel 属性,但要小心并遵循 Apple 人机界面指南 :)

    【讨论】:

    • 我的意思是“通知面板”,而不是窗口。
    • 您在 Mac OS X 中看到的一切都是窗口。所以“通知面板”也是一个窗口。
    • Andriy,你不明白我的意思,我的意思是用户界面对象“通知面板”。请看截图。
    • 嗯...现在我明白你的意思了。那么它应该是常规的 NSView 子类。我看到的唯一问题是对整个视图的反射。
    • 是的,你明白我的意思。我使用自定义 NSView 来绘制边框“通知面板”[NSGraphicsContext saveGraphicsState]; NSRect bRect = CGRectInset([self bounds], 0, 0); NSBezierPath *border = [NSBezierPath bezierPathWithRoundedRect:bRect xRadius:8 yRadius:8]; [边框 setLineWidth:0.5]; [[NSColor blackColor] 设置]; [边框笔划]; [NSGraphicsContext 恢复图形状态];然后使用渐变样式添加到自定义视图按钮。将其大小设置为自定义视图大小,但是当我运行应用程序时,我的对象的角不圆。
    猜你喜欢
    • 2020-03-06
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    • 2021-07-16
    • 2020-10-05
    • 1970-01-01
    • 2010-11-23
    相关资源
    最近更新 更多