【问题标题】:Background of UILabel visible after a composite合成后 UILabel 的背景可见
【发布时间】:2009-10-09 14:21:48
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: iphone cocoa-touch quartz-graphics uilabel


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-02
      • 2015-12-11
      • 1970-01-01
      • 1970-01-01
      • 2020-04-24
      • 2023-03-03
      • 1970-01-01
      相关资源
      最近更新 更多