如何向NSView添加阴影

时间:2013-06-30 20:44:18

标签: objective-c macos cocoa nsview nsshadow

我花了一些时间试图弄清楚如何为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:NSBezierPath转换为CGPath

3 个答案:

答案 0 :(得分:4)

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

- (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;
}

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

尝试遵循以下答案,Here

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