如何在NSWindow标题栏上显示一半外面的图像

时间:2012-11-25 21:56:21

标签: objective-c macos nsview nswindow titlebar

我有一个自定义NSWindow子类 - INAppStoreWindowgithub),其中包含自定义标题栏视图 - 我想做一些像这样的图像:
enter image description here
如您所见,功能区不完全在标题栏之外。就像在中间 我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

最简单的方法可能是使用单独的徽章窗口。使它成为主窗口的子窗口,它将保持在顶部并随之移动。它将是无边界的,基本上是透明的等等。

如果主窗口水平调整大小,可能很难保持徽章子窗口正确定位。或者,您可以轻松地移动徽章子窗口,但可能会滞后调整大小。

答案 1 :(得分:0)

您的图像必须在窗口区域内绘制。 即使这意味着窗户的一部分是透明的。

您可以使用所有常见的无边框窗口来完成此操作。只需要两个视图用于标题栏区域。一个用于标题栏本身,其中视图内容清晰,或者您可以说不透明内容未到达视图的顶部。 在徽章的子视图中,绘制您喜欢的徽章。让徽章视图延伸到标题栏视图的顶部并与其透明区域重叠。

您可能会遇到关于窗口如何与菜单栏进行交互和查看的错误权衡。由于这是高度非标准的并且具有应该由Cocoa提供和解决的UI问题,如果在任何地方,我建议寻找不同的设计。这将需要工作来维持和完善。定制的无边框窗口并不难,但它们很难做得很好。在OS X上,NSWindow的子视图中有许多视觉状态变化的微妙之处。颜色根据关键和变化而变化。窗口的主要状态。标准的窗户和景观都是免费的。使用自定义的东西,你必须做更多。