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

Objective C - OS X - Issue adding NSShadow to NSImageView

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

我创建了一个自定义 NSImageView class "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

谢谢!

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

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

向视图添加阴影时,该视图的父视图 需要启用图层支持。否则,视图的阴影会在其自身边界处被裁剪,如示例应用所示:

确保在视图的父视图上调用 -setWantsLayer:YES(或选中 Interface Builder 中的 "Core Animation Layer" 复选框)以确保阴影完全可见: