如何在不影响边框的情况下将 CALayer 的背景设置为透明?

How to set the background of a CALayer to be transparent without affecting the borders?

我的 Cocoa 应用程序中有一个 layer-backed NSView。使用以下代码 entire 自定义视图变得透明:

    self.layer?.opaque = false
    self.layer?.opacity = 0

不幸的是,我需要 CALayer 的边框保持可见(目前它正在变得透明)。如何最好地只显示边框?

编辑

我现在已经设法让它工作了,但我不确定为什么。

我以前认为它不相关,但 layer backed NSView 实际上是一个 NSTextField。这暴露了一个 backgroundColor 字段,似乎 "have more influence" 比 CALayer

设置 self.backgroundColor = NSColor.clearColor() 已完成工作。

但是,我已通过

选择了图层
  1. 设置self.wantsLayer = true
  2. 覆盖 wantsUpdateLayer 并返回 true
  3. 操作图层的代码在我的updateLayer()方法中

现在的问题是为什么上面的方法有效而 NOTCALayer?

上使用 clearColor

将图层背景设置为清晰颜色怎么样?

self.layer?.backgroundColor = NSColor.clearColor().CGColor

我认为您甚至不需要设置 opaqueopacity。我会删除那些行。

调查结果

它是 layer-backed NSTextField 而不是常规 layer-backed NSView 的事实似乎很重要...它有自己的背景 在前面 层的背景,除非您设置以下内容:

self.drawsBackground = false

如果这样做,那么您确实可以使用 NSColor.clearColor().CGColor 作为图层的背景颜色。

如果不这样做,那么看起来您需要直接设置视图的 backgroundColor 来控制背景。