Objective C - OS X - 将NSShadow添加到NSImageView的问题

时间:2016-08-14 01:40:47

标签: objective-c macos cocoa nsimageview nsshadow

我正在尝试在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年前开始看这个问题,但似乎不再适用了

Adding a Shadow to a NSImageView

谢谢!

2 个答案:

答案 0 :(得分:1)

向视图添加阴影时,该视图的超级视图 还需要启用图层支持。如果它没有,则视图的阴影会被剪切到自己的边界,如此示例应用程序中所示:

clipped shadow

确保在您观看的超级视图上调用-setWantsLayer:YES(或检查"核心动画层"在Interface Builder中复选框),以确保阴影完全可见:

full shadow

答案 1 :(得分:0)

你应该将它们设置在其他地方,例如initWithFrame:将它们从drawRect中取出:

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