刹那(せつな)の瞬き

Willkömmen! Ich heiße Setsuna. Haben Sie etwas Zeit für mich?

Cocoa: 文字に対するDropShadow

ヒレガス本の20.7節のチャレンジ1。

- (id)init;
- (void)setShadowOffset:(NSSize)offset;
- (void)setShadowBlurRadius:(float)val;
- (void)setShadowColor:(NSColor *)color;

このヒントじゃ全然判りませんよ。
initがあるって事は、alloc してinitしろって事なんでしょうけど。
背景色と同じようにNSShadowクラスのインスタンスを生成してsetしなきゃだったなんて。

xcatsanさんの(旧)Cocoaの日々:NSShadowを読んで、ようやく納得しました。

- (void)drawStringCenteredIn:(NSRect)r

このメソッド内でdrawAtPoint:を送信してる箇所の前後にロジックを挿入。

    [NSGraphicsContext saveGraphicsState];
    NSShadow* shadow = [[NSShadow alloc] init];
    [shadow setShadowOffset:NSMakeSize(10.0, -10.0)];
    [shadow setShadowBlurRadius:3.0];
    [shadow setShadowColor:[[NSColor blackColor] colorWithAlphaComponent:0.3]];
    [shadow set];

    [string drawAtPoint:strOrigin withAttributes:attributes]; // この行の前後に追加

    [NSGraphicsContext restoreGraphicsState];
    [shadow release];

こんな感じで表示できます。
後はパラメータをいじれるようにスライダー付けても面白いかも。