3

我正在尝试使用以下代码从一个 NSView 派生类中舍入并丢弃阴影:

   [graphHostView setWantsLayer:YES];


    graphHostView.layer.shadowRadius = 5.0;
    graphHostView.layer.shadowOffset = NSMakeSize(10.0f, -10.0f);
    graphHostView.layer.shadowOpacity = 0.5f;


    graphHostView.layer.needsDisplayOnBoundsChange = YES;
    graphHostView.layer.masksToBounds = YES;    
    graphHostView.layer.cornerRadius = 10.0;
    [graphHostView.layer setNeedsLayout];

阴影只有在没有舍入的情况下才起作用,并且舍入是第一位还是第二位都没有关系。我也可以使用代码间接从视图中删除阴影:

NSShadow *myShadow = [[NSShadow alloc]init]; [myShadow setShadowOffset:NSMakeSize(10.0f, -10.0f)]; [myShadow setShadowBlurRadius:3.0]; [graphHostView setShadow:myShadow]; [我的影子集];

具有完全相同的效果。我已经尝试了 display、setNeedsLayout 和其他属性和方法的所有组合,但没有任何效果。

对我来说这似乎令人难以置信,这不起作用,毕竟 NSWindow 是圆形和阴影的......

被提醒我必须补充一点,我也尝试在支持层上应用阴影,结果相同。由于masksToBounds 会掩盖边界之外的任何东西,因此有理由相信阴影不能显示在同一层上。同样清楚的是,遮罩对任何可以添加到该层的东西也有影响,在遮罩之后,因为设置阴影和遮罩的顺序对结果没有影响。

所以,问题仍然是,如果可能的话,如何在不驱动另一个带有阴影的 NSView 的情况下达到想要的结果?

4

2 回答 2

1

这为我做了(在 Swift 中):

graphHostView.layer.masksToBounds = false

于 2016-03-30T15:34:32.470 回答
-2

你需要:

[[graphHostView superview] setWantsLayer:YES];
于 2013-08-08T04:38:56.027 回答