Чтобы получить изображение фона рабочего стола, используйте:
NSURL *imageURL = [[NSWorkspace sharedWorkspace] desktopImageuRLForScreen:[NSScreen mainScreen]
NSImage *theDekstopImage = [[NSImage alloc] initWithContentsOfURL:imageURL];
Вы можете размыть изображение с помощью CIFilter. Вот документ Apple, описывающий, как применять фильтры.
И затем вы можете загрузить это изображение в цвет и установить его в качестве цвета фона для окна.Кроме того, установите в окне отсутствие маски стиля (без кнопок закрытия, рамки заголовка и т. Д.), Закройте экран и окажитесь перед всем, кроме дока:
[yourWindow setBackgroundColor:[NSColor colorWithPatternImage:theDesktopImage]];
[yourWindow setStyleMask:NSBorderlessWindowMask];
[yourWindow setLevel:kCGDockWindowLevel - 1];
[yourWindow setFrame:[[NSScreen mainScreen] frame] display:YES];
Чтобы окно исчезлов, вы можете использовать прокси-аниматор NSWindow.(Замените 1.0 на 0.0, чтобы заставить его исчезать.)
[[yourWindow animator] setAlphaValue:1.0];
Конечно, вы можете настроить это немного больше с такими вещами, как CoreAnimation, но это должно работать просто отлично.
Для обработкипри щелчке в фоновом режиме я предлагаю создать подкласс NSView, в котором вы -orderOut:
окно в -mouseDown:
.Затем поместите экземпляр этого подкласса, который охватывает весь кадр вашего окна.
Кроме того, NSViews иногда не реагируют на события клавиш, поэтому вы можете добавить прослушиватель событий для обнаружения в любое время при нажатии клавиши escapeпока ваше приложение активно:
[NSEvent addLocalMonitorForEventsMatchingMask:NSKeyDownMask handler:(NSEvent *ev)^ {
if([ev keyCode] == 0x53) {
[yourWindow orderOut:self];
}
return ev;
}