3

我花了一些时间试图弄清楚如何向NSView. 现在,我正在尝试使用NSShadow该类来完成此操作。我的代码如下。我正在尝试在NSView子类的自定义 init 方法中创建阴影。无论我尝试什么,都不会出现阴影。

NSShadow *dropShadow = [[NSShadow alloc] init];
[dropShadow setShadowColor:[NSColor blackColor]];

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

编辑

这是我尝试使用CALayer.

self.layer.shadowOffset = CGSizeMake(10, 10);
self.layer.shadowOpacity = 1.0;
self.layer.shadowRadius = 10.0;
self.layer.shadowPath = [self quartzPathFromBezierPath:[NSBezierPath bezierPathWithRect:frame]];

quartzPathFromBezierPath:NSBezierPatha 转换为CGPath.

4

3 回答 3

5

将此与偏移量一起使用,并且需要设置其他参数

- (id)initWithFrame:(NSRect)frame
{
    self = [super initWithFrame:frame];
    if (self)
    {
    NSShadow *dropShadow = [[NSShadow alloc] init];
    [dropShadow setShadowColor:[NSColor redColor]];
    [dropShadow setShadowOffset:NSMakeSize(0, -10.0)];
    [dropShadow setShadowBlurRadius:10.0];

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

    [dropShadow release];
}

return self;
}
于 2013-06-30T20:53:49.987 回答
0

另一种方法NSShadow是获取视图层并使用其与阴影相关的属性。特别是,请务必将 设置shadowOpacity为高于 0 的值(默认值)。

请注意,您不能同时使用阴影偏移和阴影路径。

于 2013-06-30T21:08:36.953 回答
0

尝试按照这个答案,在这里

我认为最重要的线是self.view.superview?.wantsLayer = true

于 2018-10-16T14:27:07.463 回答