Самый элегантный способ создания полноэкранного оверлея в Mac OS X (Lion)? - PullRequest
10 голосов
/ 25 ноября 2011

Я ищу «лучший» способ создания полноэкранного наложения под Mac OS X. Я хочу создать прозрачное или полупрозрачное наложение, которое заботится о событиях мыши и показывает другие элементы ввода / вывода.

Это наложение должно быть над всеми остальными элементами графического интерфейса (например, наложение CMD-Tab).

Вы знаете, как это сделать эффективно? В данный момент я играю с таким кодом:

int windowLevel = CGShieldingWindowLevel();
NSRect windowRect = [[NSScreen mainScreen] frame];
NSWindow *overlayWindow = [[NSWindow alloc] initWithContentRect:windowRect
                                          styleMask:NSBorderlessWindowMask
                                            backing:NSBackingStoreBuffered
                                              defer:NO
                                             screen:[NSScreen mainScreen]];

[overlayWindow setReleasedWhenClosed:YES];
[overlayWindow setLevel:windowLevel];
[overlayWindow setBackgroundColor:[NSColor colorWithCalibratedRed:0.0
                                                          green:0.0
                                                           blue:0.0
                                                          alpha:0.5]];
[overlayWindow setAlphaValue:1.0];
[overlayWindow setOpaque:NO];
[overlayWindow setIgnoresMouseEvents:NO];
[overlayWindow makeKeyAndOrderFront:nil];

… и все работает нормально, но у меня нет вариантов запуска анимации, например, медленно увеличивая прозрачность (медленно уменьшая яркость экрана) и т. Д.

Хотя я не понимаю, как поместить это окно в фоновый режим, не отпуская его и не открывая время от времени.

Так есть ли лучший или "стандартный" способ сделать это?

1 Ответ

6 голосов
/ 26 ноября 2011

Вы можете использовать NSViewAnimation . Да, это работает и на Windows.

Целью вашей анимации должно быть окно, и его эффект должен быть постепенным или постепенным, в зависимости от того, отображаете ли вы его или скрываете. Опустите клавиши рамки, так как вы, вероятно, не хотите перемещать или изменять размер окна.

Конечно, вы должны пропустить сообщение makeKeyAndOrderFront:, так как вы будете заказывать его спереди с эффектом постепенного появления.

...