在屏幕上的某个位置显示自定义UI

时间:2013-05-03 23:20:17

标签: objective-c cocoa user-interface nsview nswindow

我编写了一个自定义用户界面,如下所示:http://www.youtube.com/watch?v=XLsrVVhEs94

目前它只在NSView本身内工作,但我希望它出现在我的屏幕的每个角落。

所以我以编程方式创建了一个类似于[[NSWindow alloc] initWithContentRect:windowRect styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:NO];

的NSWindow

这很有效,但有一个问题:每次打开这个UI我都可以看到NSWindow刚刚创建。我可以看到一个具有NSWindow大小的阴影,之后它消失了(因为[NSColor clearColor])。我认为[NSColor clearColor]适用于刚刚创建的NSWindow。

NSWindow设置为[window setOpaque:NO],因此它是透明的。

还有其他方法可以在屏幕上的某个位置显示自定义用户界面吗?

- 蒂莫

1 个答案:

答案 0 :(得分:2)

我认为您要将延迟设置为YES。参考documentation,defer属性将立即创建窗口,或者将其推迟到屏幕上显示。在这种情况下,您可以在屏幕上显示之前设置所有窗口属性,添加子视图等。

NSWindow *myWin = [[NSWindow alloc] initWithContentRect:windowRect styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:YES];
... do window setup here ...
[myWin orderFront:self];

此外,如果仍然闪烁,你可以在窗口上调用'display',这样它首先将所有子视图绘制到它的缓冲区中(包括你的清除),然后调用orderFront。