OS X/Cocoa:在透明窗口内的 NSView 上绘图

Posted

技术标签:

【中文标题】OS X/Cocoa:在透明窗口内的 NSView 上绘图【英文标题】:OS X/Cocoa: Drawing on NSView inside transparent window 【发布时间】:2017-01-28 14:02:17 【问题描述】:

我正在尝试使用如下代码在 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: 中绘制一些东西。

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于OS X/Cocoa:在透明窗口内的 NSView 上绘图的主要内容,如果未能解决你的问题,请参考以下文章

事件在透明 NSWindow 中的 NSView 中不起作用

许可证密钥验证框架(OS X、Cocoa)?

如何使 NSView 透明,但保留属于它的对象? [复制]

在 Xcode 5.0.1 中创建 OS X Cocoa App Web 视图

如何修改 Mac OS X Cocoa 布局约束

OS X Cocoa:基于 NSDocument 的应用程序未保存