我尝试用下面的代码从一个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分配];myShadow设置阴影偏移:NSMakeSize(10.0f,-10.0f);myShadow设置阴影模糊半径:3.0;graphHostView设置阴影: myShadow;myShadow设置;
效果完全一样。我尝试了display、setNeedsLayout和其他属性和方法的所有组合,但都不起作用。
对我来说,这似乎是难以置信的,这不起作用,毕竟,NSWindow是四舍五入的……
被提醒,我必须补充说,我已经尝试应用阴影也在背景层上,同样的结果。由于masksToBounds会意想不到地屏蔽边界之外的任何内容,因此有理由相信阴影不能显示在同一层上。也很清楚,遮罩对稍后也可以在遮罩之后添加到该层的任何东西都有影响,因为设置阴影和遮罩的顺序不会对结果产生影响。
所以,问题仍然是,如果这是可能的,如何在不驱动另一个带阴影的NSView的情况下实现所需的结果?
发布于 2016-03-30 15:34:32
这为我做到了(在Swift中):
graphHostView.layer.masksToBounds = false
发布于 2013-08-08 04:38:56
您需要:
[[graphHostView superview] setWantsLayer:YES];
https://stackoverflow.com/questions/8741719
复制