OS X / Cocoa:在透明窗口内绘制NSView

时间:2016-09-20 15:04:31

标签: objective-c macos cocoa

我正在尝试使用如下代码在NSView中绘制简单的矩形:

    self.shapeLayer = [CAShapeLayer layer];
    self.shapeLayer.lineWidth = 2.0;
    self.shapeLayer.strokeColor = [[NSColor whiteColor] CGColor];
    self.shapeLayer.fillColor = [[NSColor blackColor] CGColor];
   [self.layer addSublayer:self.shapeLayer];
   CGMutablePathRef path = CGPathCreateMutable();
   CGPathMoveToPoint(path, NULL, 400, 400);
   CGPathAddLineToPoint(path, NULL, 400, 600);
   CGPathAddLineToPoint(path, NULL, 600, 600);
   CGPathAddLineToPoint(path, NULL, 600, 400);
   CGPathCloseSubpath(path);

   // set the shape layer's path
   self.shapeLayer.path = path;

我也尝试在NSView drawRect:中画一些东西。

在这两种情况下,Rectangle都会被绘制,但它不是在笔触/填充颜色集中,而是一些半透明版本,如alpha 0.5!

我试图在放置在NSWindow内部的NSView上绘制这个Rectangle,它将backgroundColor设置为clearColor并且对NO不透明。 我认为可能存在与此透明度相关的内容,因此我将背景颜色更改为greenColor,将不透明更改为YES。我仍然得到半透明的矩形而不是生动的纯色。 我做错了什么?

Inner Rectangle should be black! But it isn't.

1 个答案:

答案 0 :(得分:0)

好的,我发现了问题。添加了一些额外的核心动画层我想到了我之前创建并删除的视图。 然后仍然在Interface Builder中选择了这个额外的动画层,所以我取消选择它,如下图所示,现在它可以正常工作。 enter image description here