Может ли фон для приложения 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. Эти переопределения позволят окну быть фокусом клавиатуры и основным окном приложения соответственно.

Источник: Рисование пользовательского окна в Mac OS X

Другие вопросы по тегам