Цель C - OS X - проблема добавления NSShadow в NSImageView

Я пытаюсь добавить тень к NSImageView в приложении MAC.

Я создал собственный класс NSImageView "ShadowView.h" и изменил drawRect: примерно так:

- (void)drawRect:(NSRect)dirtyRect {
    [super drawRect:dirtyRect];

    NSShadow *shadow = [[NSShadow alloc] init];
    [shadow setShadowBlurRadius:5];
    [shadow setShadowOffset:NSMakeSize(30.0, 3.0)];
    [shadow setShadowColor:[NSColor redColor]];
    [shadow set];

    [self setWantsLayer:YES];
    [self setShadow:shadow];
}

Однако ничего не происходит. Кроме того, когда я отлаживаю, я вижу, что вышеупомянутый код вызывается. Я смотрел на этот вопрос 5 лет назад, но, похоже, он больше не работает

Добавление тени в NSImageView

Спасибо!

2 ответа

Решение

При добавлении тени к представлению в суперпредставлении этого представления также должна быть включена поддержка слоев. Если это не так, тень представления обрезается на своих границах, как показано в этом примере приложения:

обрезанная тень

Убедитесь, что вы звоните -setWantsLayer:YES на суперпредставлении вашего представления (или установите флажок "Базовый слой анимации" в Интерфейсном Разработчике), чтобы убедиться, что тень полностью видна:

полная тень

Вы должны установить их где-нибудь еще, например, initWithFrame: вынуть их из drawRect:

[self setWantsLayer:YES];
[self setShadow:shadow];
Другие вопросы по тегам