Установка тени окна в Какао? - PullRequest
1 голос
/ 03 февраля 2012

Я создал собственное окно для переопределения NSWindow. Он работает отлично, за исключением того факта, что у него есть тень. Я использую [self setHasShadow: NO], чтобы программно установить тень, но она все еще остается. Однако, если я проверяю с помощью [self hasShadow], он возвращает false.

Единственный способ избавиться от тени - это отключить тень в Интерфейсном Разработчике. Да, я понимаю, что это нормально, но мне любопытно, почему программный параметр не переопределяет настройку Interface Builder, даже если другие программные настройки это делают.

Мне не разрешено размещать какие-либо коды, поэтому, пожалуйста, не просите меня об этом.

Нужно ли что-либо делать в дополнение к [self setHasShadow: NO], чтобы программно задать тень окна?

РЕДАКТИРОВАТЬ: Вызов [self setHasShadow:NO] с awakeFromNib заставляет тень уйти. Однако я хочу удалить тень непосредственно из конструктора, а не awakeFromNib

Mac OSX Snow Leopard, Xcode 3.2.6

1 Ответ

2 голосов
/ 03 февраля 2012

Это можно сделать, если вы называете это в «awakeFromNib» или создаете окно без полей, например:

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

self = [super initWithContentRect: contentRect
              styleMask: NSBorderlessWindowMask 
                backing: NSBackingStoreBuffered
                  defer: NO];

if(self)
{
    [self setHasShadow:NO];

    [self setBackgroundColor:[NSColor clearColor]];
    [self setOpaque:NO];
}   

return self;
}

** Я не знаю, есть ли у вас титулбар. Если у вас есть, вы должны использовать styleMask: NSTitledWindowMask, если не NSBorderlessWindowMask

Но если вы не хотите создавать окно без полей , оно также должно работать при вызове из "awakeFromNib":

-(void)awakeFromNib {
    [self setHasShadow:NO];
}

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

enter image description here

Также Вам следует написать это, чтобы отключить тень, если вы используете окно без полей:

-(BOOL)hasShadow {
    return NO;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...