0

我正在做一些不寻常的事情。我正在尝试将我的应用程序中的所有组件都染成红色(您可能已经从我那里看到了一些关于此的其他帖子,但这是更具体的内容)。为此,我拦截了对 CALayer 的 drawInContext: 的所有调用,并在调用原始方法后,使用 kCGBlendModeDarken(或 kCGBlendModeMultipy)将红色合成到图层上。这对于大多数 UI 组件都非常有效。但是,当我使用 UILabels 执行此操作时,以前透明的背景变为白色(嗯,实际上是红色的白色)。您可以在我的工具栏的这张图片中看到它的样子

http://www.thinkastronomy.com/RedLabels.png

请注意,UIImages 也没有着色,但这是另一个问题的主题。

那么任何人都可以解释为什么 UILabel 背景会通过这种合成变得可见吗?它的发生似乎与合成模式几乎无关。我怎样才能防止这种情况?

4

1 回答 1

0

标签上的 opaque 是否设置为 NO 以及它们后面的所有透明视图?opaque 值是 UIViews 中的一个怪癖,它可能会导致透明背景出现问题。来自文档:“如果它是不透明的,则为是;否则,否。如果不透明,绘图操作假定视图填充其边界并且可以更有效地绘制。如果不透明并且视图未填充其边界,则结果是不可预测的。如果视图完全或部分透明,则将此属性设置为 NO。默认值为 YES。

于 2009-10-10T20:38:40.280 回答