我正在做一些不寻常的事情。我正在尝试将我的应用程序中的所有组件都染成红色(您可能已经从我那里看到了一些关于此的其他帖子,但这是更具体的内容)。为此,我拦截了对 CALayer 的 drawInContext: 的所有调用,并在调用原始方法后,使用 kCGBlendModeDarken(或 kCGBlendModeMultipy)将红色合成到图层上。这对于大多数 UI 组件都非常有效。但是,当我使用 UILabels 执行此操作时,以前透明的背景变为白色(嗯,实际上是红色的白色)。您可以在我的工具栏的这张图片中看到它的样子
http://www.thinkastronomy.com/RedLabels.png
请注意,UIImages 也没有着色,但这是另一个问题的主题。
那么任何人都可以解释为什么 UILabel 背景会通过这种合成变得可见吗?它的发生似乎与合成模式几乎无关。我怎样才能防止这种情况?