我正在尝试使用以下代码从一个 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 的情况下达到想要的结果?