带有图层阴影的UILabel文本颜色透明度?

Posted

技术标签:

【中文标题】带有图层阴影的UILabel文本颜色透明度?【英文标题】:UILabel text color transparency with layer shadows in place? 【发布时间】:2012-01-04 06:24:16 【问题描述】:

我有一个UILabel,我正尝试在其上应用半透明渐变作为颜色。例如,在我的 UILabel 子类中,我试图以这种方式设置渐变颜色:

self.textColor = [UIColor colorWithPatternImage:someTransparentGradient];

然而,在处理这个问题时,我发现UILabel 似乎无法在当图层阴影到位时以透明度进行绘制。我试图将文本颜色设置为清除:

self.textColor = [UIColor clearColor];

但文本最终是白色的。想法?

如果您将文本颜色设置为清除,然后将图层阴影应用到文本视图上,您​​可以自己复制问题。

【问题讨论】:

你在哪里设置了textColor?即,self.textColor = [UIColor clearColor]; 我在 UILabel 子类中的自定义方法中设置了它。 您是否将opaque 设置为YES @MarkAdams: opaque 设置为 NO 【参考方案1】:

如果您已经通过 nib 创建了 UILabel 并将 textColor 设置为 initWithFrame,您将不会得到想要的结果。

UILabel子类中,写initWithCoder并设置颜色。

-(id)initWithCoder:(NSCoder *)aDecoder

    self = [super initWithCoder:aDecoder];
    if (self) 
        // Initialization code
        self.textColor = [UIColor clearColor];
    
    return self;

编辑

看,这是默认(灰色)背景的屏幕截图。

这是白底截图

请下载sample application并试用。

【讨论】:

我确实通过 nib 文件创建了 UILabel,但我没有覆盖 initWithFrame,因为如果它是从 nib 实例化的,则不会调用它。我有一个在标准 initWithCoder: 之后调用的自定义初始化程序。但是如果你真的用[UIColor clearColor]尝试你的方法,你会看到文本仍然是白色的。 我试过clearColor。如果是 clearColor,则文本不可见。因此,请确保在 initWithCoder 中设置颜色 我已经上传了测试应用程序。请下载并试用。 @Aadhira:是的,弄清楚了为什么您的项目有效而不是我的。我正在对图层应用阴影。试试看,你会看到的。【参考方案2】:

我通常不接受自己的答案,但在这种情况下我必须接受。这似乎是一个错误。无论何时将图层阴影应用于UILabel,都不再支持文本透明度。我会归档雷达。

【讨论】:

以上是关于带有图层阴影的UILabel文本颜色透明度?的主要内容,如果未能解决你的问题,请参考以下文章

文字阴影不透明度

谁知道photoshop中怎么使图片产生阴影效果

如何在不改变文本透明度的情况下为 UILabel 设置背景图像并调整其 alpha?

在android xml中获取透明椭圆形下方的阴影

不透明度低于 1 时带有奇怪阴影(模糊)的字体(仅限 Chrome)

Xcode 错误?改变阴影不透明度也会改变背景高光