伪装成NSWindow的NSMenuItem中有一个NSView

4
在开始之前,我应该说一声,我知道这看起来有点不切实际,但是我认为还是值得一试的。
我现在正在开发一个 Mac 状态栏应用程序。它有一个 NSStatusItem 在菜单栏中,单击后会显示一个自定义窗口,类似于 iPad 上的弹出式窗口或者像 Mac 上的 Fantastical 应用程序。然后我通过在状态项菜单中插入一个 nsmenu 项来测试它。该视图设置了窗口背景颜色为透明色。然而,正如您在下面的图片中所见,这仍然不太完美。
还有两个问题:
1. 在该项上方和下方仍然存在一条小白线。 2. 透明区域并不完全透明,就像它上面有一个模糊过滤器一样。
除此之外,它的工作效果非常好。我只是不知道是否有其他人尝试过类似的事情,并想知道如何解决这两个问题,这似乎是唯一阻止它工作的东西。
如果没有办法解决这个问题,我可能不得不使用自定义视图来获取屏幕上的坐标,以便在 NSStatusItem 下方定位我的窗口。

我的问题是:你是如何让菜单的那一部分变得透明的?我的直觉告诉我这是不可能避免的;NSMenu会对其项目的背景应用模糊滤镜,无论绘制了什么,但我对于你是如何首先到达这里感兴趣。即使我使用一个透明视图并将其放入NSMenuItem中,我仍然会得到完全白色的背景。特殊代码? - Itai Ferber
在NSMenuItem视图中,您调用[[self window] setBackgroundColor:[NSColor clearColor]]。 - Colin Wheeler
有趣。我会研究一下... - Itai Ferber
好奇怪,这对我似乎不起作用。在-awakeFromNib中的[[[self.menuItem view] window] setBackgroundColor:[NSColor clearColor]]似乎没有任何效果。示例:http://cl.ly/3k1A02113g2T2j273H2N - Itai Ferber
如果那不起作用,我建议使用自定义的弹出窗口(或者在 Lion 中使用真正的弹出窗口),而不是菜单。 - jtbandes
1个回答

0

这在NSStatusItem方面增加了很多复杂性,因为必须使用自定义的NSView来获取屏幕坐标并在其下方定位窗口。我并不反对这样做,我知道这是一种长远的想法,但我不知道是否有一种方法可以以这种方式伪造它。 - Colin Wheeler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接