Как заставить мое приложение оставаться поверх полноэкранных приложений - PullRequest
10 голосов
/ 28 сентября 2011

У меня есть приложение, которое всегда должно оставаться поверх других приложений.В настоящее время я использую свойство setLevel для главного окна, чтобы держать его поверх других приложений для настольных компьютеров.

Я пытаюсь исправить свое приложение, чтобы оно также могло оставаться поверх полноэкранных приложений в Lion,Любые идеи о том, как это можно сделать?

Делегат приложения выглядит следующим образом:

#import "alwaysOnTopAppDelegate.h"

@implementation alwaysOnTopAppDelegate

@synthesize window;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    [window setLevel:NSFloatingWindowLevel];
}

@end

Ответы [ 3 ]

6 голосов
/ 21 декабря 2011

Нашел ответ: делегат приложения должен выглядеть так:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    [window setLevel:kCGMainMenuWindowLevel-1];
    [window setCollectionBehavior:NSWindowCollectionBehaviorStationary|NSWindowCollectionBehaviorCanJoinAllSpaces|NSWindowCollectionBehaviorFullScreenAuxiliary];
}
3 голосов
/ 08 октября 2011

Способ работы Yoink прост: просто установите для параметра «Приложение - агент (UIElement)» значение YES в Info.plist для вашего приложения.Это будет означать, что он не отображается в доке и т. Д., Но это, вероятно, хорошо для вспомогательного окна (ну, это было для меня!).В этом случае, вероятно, имеет смысл предоставить пункт меню, чтобы пользователь мог легко остановить приложение.

0 голосов
/ 13 апреля 2016

Следуйте мой тестовый код, он работает нормально, надеюсь, может помочь.

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];
...