在NSImageView周围绘制阴影

时间:2013-10-28 22:39:11

标签: objective-c macos nsview nsimageview

我正试图在NSImageView下绘制阴影。我正在访问视图的CALayer并在其中设置阴影属性:

[self.originalImageView setWantsLayer:YES];
CALayer *imageLayer = self.originalImageView.layer;
[imageLayer setShadowRadius:5.f];
[imageLayer setShadowOffset:CGSizeZero];
[imageLayer setShadowOpacity:0.5f];
[imageLayer setShadowColor:CGColorCreateGenericGray(0, 1)];
imageLayer.masksToBounds = NO;

但即使我将面具设置为NO,我也明白了:

enter image description here

仔细看看阴影。它完全水平显示,但垂直显示,它被剪裁。图像是纵横拟合的,图像和图像视图都可以是任意大小。如果我用NSShadow而不是图层的阴影来尝试它,我会得到完全相同的结果。我可以在iOS中使用myView.clipsToBounds = NO并用它来解决这个问题,但我在Mac上找不到该属性。

如何在没有剪裁的情况下在任意大小的NSImageView下绘制阴影?

1 个答案:

答案 0 :(得分:0)

使用最新的Xcode,我发现我可以将CI过滤器应用于视图(我不知道该功能之前是否也可用。)然后我在我的图像视图上应用阴影容器视图的图层。它完美地运作。底线:如果我在图像视图的自己的图层上应用滤镜,同样的事情会发生,但如果我将它应用于容器视图的图层,它就会起作用!