我有一个必须始终保持在其他应用程序之上的应用程序。 我目前正在使用主窗口的setLevel属性使其保持在其他桌面应用程序之上。
我正在尝试修复我的应用,因此它也可以保持在Lion中的全屏应用程序之上。 关于如何做到这一点的任何想法?
应用程序委托如下所示:
#import "alwaysOnTopAppDelegate.h"
@implementation alwaysOnTopAppDelegate
@synthesize window;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
[window setLevel:NSFloatingWindowLevel];
}
@end
答案 0 :(得分:6)
找到答案:应用代表应如下所示:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
[window setLevel:kCGMainMenuWindowLevel-1];
[window setCollectionBehavior:NSWindowCollectionBehaviorStationary|NSWindowCollectionBehaviorCanJoinAllSpaces|NSWindowCollectionBehaviorFullScreenAuxiliary];
}
答案 1 :(得分:3)
Yoink的工作方式很简单: 只需在应用程序的Info.plist中将“Application is Agent(UIElement)”设置为YES即可。这意味着它不会出现在码头等等,但对于辅助窗口来说这可能是好的(好吧,这对我来说!)。在这种情况下提供菜单栏项可能是有意义的,因此用户可以轻松地停止应用程序。
答案 2 :(得分:0)
以下是我的测试代码,它运行正常,希望可以帮助。
NSPanel *test_panel = [[NSPanel alloc] initWithContentRect:NSMakeRect(300, 300, 500, 500) styleMask:NSTitledWindowMask|NSClosableWindowMask backing:NSBackingStoreBuffered defer:YES];
[test_panel setReleasedWhenClosed:YES];
[test_panel setHidesOnDeactivate:NO];
[test_panel setFloatingPanel:YES];
[test_panel setStyleMask:NSBorderlessWindowMask | NSNonactivatingPanelMask];
[test_panel setLevel:kCGMainMenuWindowLevel-1];
[test_panel setCollectionBehavior:NSWindowCollectionBehaviorCanJoinAllSpaces|NSWindowCollectionBehaviorFullScreenAuxiliary];
[test_panel setCanBeVisibleOnAllSpaces:YES];
[test_panel center];
[test_panel orderFront:nil];