2013-06-30 2 views
1

Я потратил некоторое время, пытаясь выяснить, как добавить тень к NSView. На данный момент я пытаюсь использовать класс NSShadow для выполнения этого. Мой код ниже. Я пытаюсь создать тень в пользовательском методе инициализации в подклассе NSView. Независимо от того, что я пытаюсь, тени не появляется.Как добавить тень к NSView

NSShadow *dropShadow = [[NSShadow alloc] init]; 
[dropShadow setShadowColor:[NSColor blackColor]]; 

[self setWantsLayer:YES]; 
[self setShadow:dropShadow]; 

Редактировать

Вот как я пытался сделать это с CALayer.

self.layer.shadowOffset = CGSizeMake(10, 10); 
self.layer.shadowOpacity = 1.0; 
self.layer.shadowRadius = 10.0; 
self.layer.shadowPath = [self quartzPathFromBezierPath:[NSBezierPath bezierPathWithRect:frame]]; 

quartzPathFromBezierPath: преобразует NSBezierPath к CGPath.

+0

Вы пробовали просмотр инспекторов эффектов в интерфейсе Builder? –

ответ

4

использовать это с офсетным и другим PARAMS должен быть установлен

- (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; 
} 
0

Альтернатива NSShadow, чтобы получить взгляды слоя и использовать его теневые связанные свойства. В частности, не забудьте установить shadowOpacity на что-то выше 0 (по умолчанию).

Обратите внимание, что вы не можете использовать смещение тени и путь тени в одно и то же время.

+0

Я пробовал это сделать. См. Мое редактирование. Ничего не видно. –

+0

Проверьте, что возвращает 'quartzPathFromBezierPath', почему бы вам просто не спросить о безье для своего пути? – Wain

+0

Я не думаю, что вы можете запросить 'NSBezierPath' непосредственно для' CGPath' (даже если вы можете использовать 'UIBezierPath'). Я нашел исходный код для 'quartzPathFromBezierPath:' на сайте Apple. Как бы вы это сделали? –

Смежные вопросы