1

我正在尝试向 MAC 应用程序上的 NSImageView 添加阴影。

我创建了一个自定义 NSImageView 类“ShadowView.h”并修改了 drawRect: 如下所示:

- (void)drawRect:(NSRect)dirtyRect {
    [super drawRect:dirtyRect];

    NSShadow *shadow = [[NSShadow alloc] init];
    [shadow setShadowBlurRadius:5];
    [shadow setShadowOffset:NSMakeSize(30.0, 3.0)];
    [shadow setShadowColor:[NSColor redColor]];
    [shadow set];

    [self setWantsLayer:YES];
    [self setShadow:shadow];
}

然而什么也没有发生。此外,当我调试时,我可以看到上面的代码被调用。我从 5 年前看过这个问题,但它似乎不再起作用

为 NSImageView 添加阴影

谢谢!

4

2 回答 2

1

向视图添加阴影时,该视图的超级视图需要启用图层支持。如果没有,视图的阴影会在它自己的边界处被剪裁,如下面的示例应用程序所示:

剪裁的阴影

确保调用-setWantsLayer:YES视图的超级视图(或选中 Interface Builder 中的“核心动画层”复选框)以确保阴影完全可见:

全影

于 2016-08-14T13:36:38.097 回答
0

You should set these somewhere else like, initWithFrame: take them out of the drawRect:

[self setWantsLayer:YES];
[self setShadow:shadow];
于 2016-08-14T03:19:26.900 回答