maskToBounds设置为NO似乎没有效果

时间:2013-06-02 00:16:32

标签: objective-c cocoa layer shadow

我是Obj-C开发的新手,我目前只是处理一个简单的问题。我正在尝试创建NSView并添加边框和阴影,我有以下代码:

_view.wantsLayer = YES;
CALayer *layer = _view.layer;

layer.masksToBounds = NO;
layer.borderWidth = 2;
layer.shadowColor = [[NSColor blackColor] CGColor];
layer.shadowOffset = CGSizeMake(2, -2);
layer.shadowOpacity = 1;
layer.shadowRadius = 6;

显然,这应该有效,因为我已将maskToBounds设置为NO,但我无法获得比这更好的内容:

freaking shadow

请参阅?阴影不能超出盒子。我错过了什么?我已经检查过很多关于这个主题的话题,但我找不到任何解决这个问题的方法......

1 个答案:

答案 0 :(得分:2)

问题是,托管视图会将图层剪切到其边界。

您可以尝试在其超级视图上启用图层支持:

[_view superview].wantsLayer = YES;
CALayer *layer = _view.layer;

layer.masksToBounds = NO;
layer.borderWidth = 2;
layer.shadowColor = [[NSColor blackColor] CGColor];
layer.shadowOffset = CGSizeMake(2, -2);
layer.shadowOpacity = 1;
layer.shadowRadius = 6;

鉴于superview足够大,这也应该绘制核心动画层中位于视图边界之外的部分。

enter image description here