首页 > 解决方案 > 带圆角的 CALayer 显示黑色或外来内容

问题描述

事情是这样的:我有一个几乎完成的应用程序。我添加了一个与 GUI 完全无关的功能(所以我认为),我注意到 GUI 元素的一种奇怪行为,这些元素已经被打磨并且可以完美地工作。经过两周的玩耍,禁用/启用代码,重新创建和更改内容后,我对如何解决这个问题没有线索。

看看这张照片:

在此处输入图像描述

两个错误同时出现,这就是我将它们合并为一个问题的原因。

  1. 我有一个简单的背景视图,其中 .wantsLayer = true 和 .masksToBounds = true。在它上面我有多个具有相同设置的视图和一个 .cornerRadius 到它们的层。几周前,这非常有效。现在我可以看到一些(!不是每个)角落实际上并没有被切断,而是显示(通常只是黑色)内容。
  2. 一些角落显示白色内容(左上角)。有些显示完全不同层的内容(底部视图)!

澄清一下:出于调试原因,我在图片顶部的白色下方添加了一个简单的红色分层视图。我希望白色视图在顶部和底部都有圆角(红色!)。然而,顶部是白色的(带有红线),而底部则根本不是圆形的。其次,这对我来说很奇怪,底部视图根本没有任何设置为红色!红色的角来自顶视图层的颜色!如果我将顶视图的背景视图设为蓝色而不是红色,那么底视图的角也会变为蓝色。

到目前为止我发现了什么:

  1. 当父视图未设置为 .maskToBounds = true 时,通常会发生拐角。它在我的示例中设置,并且之前也有效。如果不触及 Interface Builder 中的任何相关代码或视图,我怎么能搞砸呢?
  2. 我在网上找不到任何关于在不可见的部分中显示其他图层内容的图层...

任何帮助将不胜感激!

注意:底部视图上有一个阴影,这是一个完全不同的视图,下面只做一个阴影。我忘记将其删除以获取屏幕截图。

标签: swiftmacoscalayernsview

解决方案


我不知道这种行为背后的原因,但我找到了解决方案。

NSProgressIndicator 是众多视图(带有 CALayers)和子视图之一。我为它分配了一个名为“Hue Adjust”的内容过滤器,其值为-0.5,以便获得不同的颜色条。在 Interface Builder 中删除这个内容过滤器解决了这个问题,GUI 看起来又像它应该的样子:

在此处输入图像描述

我仍然很想知道为什么会发生这种情况以及如何在不丢失角落的情况下保持有色进度条......


推荐阅读