Окно без границ и тень в какао - PullRequest
2 голосов
/ 08 июля 2011

Я создал окно без полей и хочу удалить его тень.

Это мой код окна инициализации:

- (id)initWithContentRect:(NSRect)contentRect
                styleMask:(NSUInteger)windowStyle
                  backing:(NSBackingStoreType)bufferingType
                    defer:(BOOL)flag
{

    if (![super initWithContentRect: contentRect
                          styleMask: NSBorderlessWindowMask 
                            backing: NSBackingStoreBuffered
                              defer: NO]) return nil;

    [self setHasShadow:NO];
    [self setOpaque:NO];
    [self setBackgroundColor:[NSColor clearColor]];
    [self setAcceptsMouseMovedEvents:YES];
    return self;
}

Как вы можете видеть, я использую setHasShadow:NO, но ничего не происходит, и тень все еще показывает.

Как я могу удалить тень?

1 Ответ

3 голосов
/ 08 июля 2011

Ну, во-первых, вы должны назначить результат вашего вызова на super на self:

self = [super initWithContentRect: contentRect
                      styleMask: NSBorderlessWindowMask 
                        backing: NSBackingStoreBuffered
                          defer: NO];
if(self)
{
    //continue with initialisation
}
return self;

Также, если окно загружается из пера, оно может иметь тень, указанную в Интерфейсном Разработчике. Поскольку настройки в кончике загружаются после вызова метода init, они могут переопределить настройки в вашем методе init.

Тогда решение заключается в том, чтобы либо убедиться, что в окне не установлен флажок «Внешний вид тени» в Интерфейсном Разработчике, либо вызвать [self setHasShadow:NO] в ‑awakeFromNib, а не в инициализаторе.

‑awakeFromNib всегда вызывается после загрузки файла пера и подключения всех выходов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...