Чтобы создать оверлейное окно, вы должны создать подкласс NSWindow и установить его маску стиля и цвет фона:
@implementation BigTransparentWindow
- (id)initWithContentRect:(NSRect)contentRect
styleMask:(NSUInteger)windowStyle
backing:(NSBackingStoreType)bufferingType
defer:(BOOL)deferCreation
{
self = [super initWithContentRect:contentRect
styleMask:NSBorderlessWindowMask //this makes the window transparent
backing:bufferingType
defer:deferCreation];
if(self)
{
[self setOpaque:NO];
[self setHasShadow:NO];
[self setBackgroundColor:[[NSColor blackColor] colorWithAlphaComponent:0.5]];
}
return self;
}
@end
Затем вам нужно установить рамку окна так, чтобы она покрывала все экраны, и вам необходимо соответствующим образом установить уровень окна:
- (IBAction)showWindow:(id)sender
{
//set the window so it covers all available screens
NSRect screensRect = NSZeroRect;
for(NSScreen* screen in [NSScreen screens])
{
screensRect = NSUnionRect(screensRect,[screen frame]);
}
[yourWindow setFrame:screensRect display:YES];
if(coverScreen)
{
//set the window so it is above all other windows
[yourWindow setLevel:kCGMaximumWindowLevel];
}
else
{
//set the window so it sits just above the desktop icons
[yourWindow setLevel:kCGDesktopIconWindowLevel + 1];
}
}
Как вы упомянули, вы можете использовать настройки NSApplicationPresentationOptions
для NSApp
, чтобы контролировать, как пользователь может взаимодействовать с системой. Простой способ проверить это, не блокируя себя, - установить NSTimer
, который вызывает метод, который выводит приложение из режима киоска после истечения времени ожидания.