Несколько замечаний, прежде чем ответить на вопрос:
- Вам не нужно вызывать
super
реализацию drawRect:
на ванили NSView
.Реализация по умолчанию ничего не делает. - Вы должны использовать
[self bounds]
в качестве прямоугольника заполнения, а не dirtyRect
.Параметр dirtyRect
используется для указания части вида, которая требует рисования, и используется только для оптимизации рисования. - Вы пропускаете объект
dropShadow
.Вы должны либо вызвать autorelease
на нем после создания, либо вызвать release
на нем после вызова setShadow:
.
Причина, по которой тень не отображается, имеет две стороны.Во-первых, для того, чтобы представления на основе слоя отображали тень, суперпредставление представления также должно быть на уровне слоя.
Во-вторых, вы устанавливаете цвет тени, но не другие параметры:
- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
NSShadow *dropShadow = [[NSShadow alloc] init];
[dropShadow setShadowColor:[NSColor redColor]];
[dropShadow setShadowOffset:NSMakeSize(0, -10.0)];
[dropShadow setShadowBlurRadius:10.0];
[self setWantsLayer: YES];
[self setShadow: dropShadow];
[dropShadow release];
}
return self;
}