2012-02-19 2 views
-2

Я пытаюсь нарисовать NSShadow на фоне NSView. Я хочу использовать его в качестве замены для NSGradient, так как мне нужно поддерживать Mac OS X Tiger. Как я могу это сделать? Я знаю, что это должно быть довольно легко, и я должен ошибаться.Рисовать NSShadow внутри NSView

Спасибо!

+2

Расширьте свой вопрос, пожалуйста. Что вы хотите «бросить» тень? –

ответ

6

Самый простой подход - просто установить свойства тени для слоя вида. Если у вас есть NSView * с именем view, это было бы что-то вроде:

[[view layer] setShadowOpacity:0.5]; 

Установки непрозрачности тени на нечто большее, чем 0 будет сделать тень видна. Нарисованная тень будет похожа на альфа-канал представления, поэтому все, что вы рисуете в представлении, будет иметь тень. Есть несколько других атрибутов тени, которые вы можете установить, например, радиус размытия. Взгляните на номер CALayer reference page.

Если вы должны использовать NSShadow, то просто создать тень, прежде чем сделать свой рисунок:

- (void)drawRect:(NSRect)rect 
{ 
    NSShadow *shadow = [[[NSShadow alloc] init] autorelease]; 
    [shadow setShadowBlurRadius:3.0]; 
    [shadow setShadowOffset:NSMakeSize(0.0, 5.0)]; 
    [shadow setShadowColor:[NSColor colorWithCalibratedWhite:0.0 alpha:0.6]]; 
    [shadow set]; 
    // continue with your drawing... 
} 
+0

На Tiger нет Core Animation, поэтому я должен использовать NSShadow :( –

+0

Извините, что не прояснили. –

+0

Некоторые исправления необходимы, поскольку это не будет компилироваться. Имя метода - setShadowBlurRadius. Также setShadowOffset принимает NSSize, а не double , –