我正在尝试使用以下代码从一个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]; [myShadow set];
具有完全相同的效果。我已经尝试了display,setNeedsLayout和其他属性和方法的所有组合,但没有任何效果。
对我而言,这似乎令人难以置信,毕竟这不起作用,NSWindow是圆形和阴影......
提醒我必须补充说我已尝试在背衬层上应用阴影,结果相同。 由于maskToBounds预计会掩盖边界之外的任何东西,因此可以合理地相信阴影不能显示在同一层上。 同样清楚的是,掩蔽对掩蔽之后可以添加到该层的任何事物都有影响,因为设置阴影和掩模的顺序对结果没有影响。
所以,问题仍然是,如果可能的话,如何在没有用阴影驱动另一个NSView的情况下实现想要的结果?
答案 0 :(得分:1)
这对我来说(在Swift中):
graphHostView.layer.masksToBounds = false
答案 1 :(得分:-2)
你需要:
[[graphHostView superview] setWantsLayer:YES];