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 中不起作用