如何在不影响边框的情况下将 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()
已完成工作。
但是,我已通过
选择了图层
- 设置
self.wantsLayer = true
- 覆盖
wantsUpdateLayer
并返回 true
- 操作图层的代码在我的
updateLayer()
方法中
现在的问题是为什么上面的方法有效而 NOT 在 CALayer
?
上使用 clearColor
将图层背景设置为清晰颜色怎么样?
self.layer?.backgroundColor = NSColor.clearColor().CGColor
我认为您甚至不需要设置 opaque
和 opacity
。我会删除那些行。
调查结果
它是 layer-backed NSTextField
而不是常规 layer-backed NSView
的事实似乎很重要...它有自己的背景 在前面 层的背景,除非您设置以下内容:
self.drawsBackground = false
如果这样做,那么您确实可以使用 NSColor.clearColor().CGColor
作为图层的背景颜色。
如果不这样做,那么看起来您需要直接设置视图的 backgroundColor 来控制背景。
我的 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()
已完成工作。
但是,我已通过
选择了图层- 设置
self.wantsLayer = true
- 覆盖
wantsUpdateLayer
并返回 true - 操作图层的代码在我的
updateLayer()
方法中
现在的问题是为什么上面的方法有效而 NOT 在 CALayer
?
clearColor
将图层背景设置为清晰颜色怎么样?
self.layer?.backgroundColor = NSColor.clearColor().CGColor
我认为您甚至不需要设置 opaque
和 opacity
。我会删除那些行。
调查结果
它是 layer-backed NSTextField
而不是常规 layer-backed NSView
的事实似乎很重要...它有自己的背景 在前面 层的背景,除非您设置以下内容:
self.drawsBackground = false
如果这样做,那么您确实可以使用 NSColor.clearColor().CGColor
作为图层的背景颜色。
如果不这样做,那么看起来您需要直接设置视图的 backgroundColor 来控制背景。