Как заставить приложение оставаться на вершине полноэкранных приложений
У меня есть приложение, которое должно всегда оставаться поверх других приложений.
В настоящее время я использую свойство setLevel для главного окна, чтобы сохранить его поверх других настольных приложений.
Я пытаюсь исправить свое приложение, чтобы оно также оставалось поверх полноэкранных приложений в Lion.
Любые идеи о том, как это можно сделать?
Делегат приложения выглядит так:
#import "alwaysOnTopAppDelegate.h"
@implementation alwaysOnTopAppDelegate
@synthesize window;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
[window setLevel:NSFloatingWindowLevel];
}
@end
Ответы
Ответ 1
Найден ответ: делегат приложения должен выглядеть так:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
[window setLevel:kCGMainMenuWindowLevel-1];
[window setCollectionBehavior:NSWindowCollectionBehaviorStationary|NSWindowCollectionBehaviorCanJoinAllSpaces|NSWindowCollectionBehaviorFullScreenAuxiliary];
}
Ответ 2
То, как работает Yoink, прост:
Просто установите "Application is Agent (UIElement)" в YES в Info.plist для вашего приложения. Это будет означать, что он не отображается на доке и т.д., Но это, вероятно, прекрасно для вспомогательного окна (ну, это было для меня!). Вероятно, имеет смысл представить элемент меню в этом случае, чтобы пользователь мог легко остановить приложение.
Ответ 3
follow - мой тестовый код, он работает нормально, надеюсь, может помочь.
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];