【问题标题】:How to set the background of a CALayer to be transparent without affecting the borders?如何将 CALayer 的背景设置为透明而不影响边框?
【发布时间】:2015-05-11 04:16:02
【问题描述】:

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

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

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

编辑

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

我以前认为它不相关,但 layer backed NSView 实际上是 NSTextField。这暴露了一个似乎比CALayer“影响更大”的 backgroundColor 字段

设置self.backgroundColor = NSColor.clearColor() 完成了这项工作。

但是,我选择了分层

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

现在的问题是为什么上述方法有效,而CALayer 上使用clearColor

【问题讨论】:

  • 所以你需要边框作为轮廓?

标签: objective-c cocoa swift calayer nsview


【解决方案1】:

发现

它是layer-backed NSTextField 而不是常规的layer-backed NSView 的事实似乎很重要......它有自己的背景,将出现在图层背景的前面,除非你设置如下:

self.drawsBackground = false

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

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

【讨论】:

    【解决方案2】:

    将图层背景设置为透明色怎么样?

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

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

    【讨论】:

    • 我试过了(我又试了一次以确保),但它只是让它变成了有效的白色,我无法看透这个图层支持的视图背后的内容。
    • 我已经更详细地解决了这个问题 - 请参阅我在问题中发布的发现。这符合你的经验吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    • 2020-02-25
    相关资源
    最近更新 更多