Может ли фон для приложения Mac быть прозрачным?
Я использую quartz2d, чтобы сделать свое первое приложение для Mac, и мне было интересно, можно ли сделать фон прозрачным. Это означает, что если бы все приложение делало фон прозрачным, то при его запуске вы не увидите ничего, кроме приложений позади него.
У меня такое чувство, что это невозможно, но я все равно решил спросить.
1 ответ
На самом деле, это возможно.
И вы можете даже сделать полностью прозрачное окно приложения кликабельным. См. Рисование пользовательского окна в Mac OS X
Построение прозрачного окна
Создание собственного окна начинается с прозрачного окна. Я буду использовать пользовательский подкласс NSWindow с именем RoundWindow. Конструктор для этого подкласса выглядит так:
- (id)initWithContentRect:(NSRect)contentRect
styleMask:(NSUInteger)windowStyle
backing:(NSBackingStoreType)bufferingType
defer:(BOOL)deferCreation
{
self = [super
initWithContentRect:contentRect
styleMask:NSBorderlessWindowMask
backing:bufferingType
defer:deferCreation];
if (self)
{
[self setOpaque:NO];
[self setBackgroundColor:[NSColor clearColor]];
}
return self;
}
Три изменения, внесенные в окно этим конструктором, довольно очевидны:
- NSBorderlessWindowMask (окно без стандартного оконного обрамления)
- setOpaque: NO (чтобы любая часть окна была прозрачной)
- setBackgroundColor: [NSColor clearColor] (если мы больше ничего не сделаем, окно будет прозрачным)
Результат - прозрачное прямоугольное окно. Этот метод может быть вызван напрямую (если создается окно в коде). Он также будет вызываться загрузчиком NIB при загрузке окна из NIB.
Так как это окно использует стиль NSBorderlessWindowMask, мы должны переопределить методы canBecomeKeyWindow и canBecomeMainWindow, чтобы вернуть YES. Эти переопределения позволят окну быть фокусом клавиатуры и основным окном приложения соответственно.