1

NSWindow がその影でそれを行う方法のように、NSView を囲むドロップ シャドウを作成しようとしていますが、いくつかの問題があります。ドロップ シャドウを作成する NSView のクラスを作成し、オーバーライド メソッドに次のコードを使用しています。

   -(void)drawRect:(NSRect)dirtyRect {
    NSRect rect = NSInsetRect([self bounds], 10.0, 10.0);
    NSShadow *dropShadow = [[[NSShadow alloc] init] autorelease];
    [dropShadow setShadowColor:[NSColor blackColor]];
    [dropShadow setShadowBlurRadius:5];
    [dropShadow setShadowOffset:NSMakeSize(0,-3)];

    [NSGraphicsContext saveGraphicsState];

    [dropShadow set];

    NSRectFill(rect);

    [NSGraphicsContext restoreGraphicsState];

    [super drawRect:dirtyRect];
}

これは、私が見ているドロップシャドウを実際には作成しません。

目指す影はここにある…

NSWindow シャドウ

むしろ、ビューの境界内の境界線のように見える NSView を通る線を作成します。誰でもこれについて何かアイデアがありますか?

4

1 に答える 1

2

NSView がその境界をクリップするため、同様のシャドウの問題に直面しました。

レイヤーに裏打ちされたビューを使用したときに修正しました。スーパービューのwantsLayerプロパティを YES に設定するだけです。つまり[[view superView] setWantsLayer:YES] 、ビューの影を[view setShadow:dropShadow]に設定します。

于 2013-03-05T05:20:04.187 に答える