【问题标题】:NSWindow with bottom corners roundedNSWindow 底角圆润
【发布时间】:2011-04-20 07:15:59
【问题描述】:

我已经将 NSWindow 子类化,因此我可以进行一些调整并拥有一个自定义窗口。其中之一是使底角变圆,但尚未成功。

我尝试过this,但我的窗口没有标准状态栏,它不起作用。 我希望这是可能的;)

提前致谢

【问题讨论】:

  • 为什么要让你的窗口非标准?这样做的主要影响是惹恼您的应用程序的用户并让他们讨厌您。用户界面指南的存在是有原因的。使用它们。
  • 是的,但即使是 Apple 也有非标准窗口:iTunes 和 AppStore 的工具栏、Safari 的 WebInspector 和 Xcode 中的一些窗口以及具有自定义窗口的数以百计的游戏等都是非标准示例和并非所有人都会惹恼用户。我认为这取决于它们的设计程度;)
  • 是的,就违反自己的 UI 准则而言,Apple 是一个严重的违规者。但这并不意味着每个人都应该这样做。

标签: objective-c cocoa macos nswindow


【解决方案1】:

由于我的窗口有样式:NSBorderlessWindowMask 我已经通过子类化窗口的 containerView 并覆盖 drawRect 来解决这个问题:

- (void) drawRect:(NSRect)dirtyRect{
    [[NSColor windowBackgroundColor] set];

    [NSGraphicsContext saveGraphicsState];
    NSBezierPath *path; 
    path = [NSBezierPath bezierPathWithRoundedRect:[self bounds] xRadius:5 yRadius:5];

    ... // do more fancy stuff here ;)

    [NSGraphicsContext restoreGraphicsState];
}

【讨论】:

    【解决方案2】:

    在窗口的委托中使用这个:

    - (void)awakeFromNib
    {
        [window setContentBorderThickness:32.0 forEdge:NSMinYEdge];
    }
    

    或者,您可以在 Xcode 4 中大小检查器的窗口ContentBorder 上设置此行为。这将使窗口看起来像这样:

    【讨论】:

    • 对不起,我忘了说我的窗口是用NSBorderlessWindowMask 样式初始化的;(
    猜你喜欢
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    • 1970-01-01
    相关资源
    最近更新 更多