0

我的目标是通过执行以下操作为我的 uilabel 添加渐变(CustomLabelBackGroundUILabel 的子类)

@implementation CustomLabelBackGround

- (id)initWithFrame:(CGRect)frame {
    if ((self = [super initWithFrame:frame])) {
        // Initialization code
    }
    return self;
}

- (void)drawRect:(CGRect)rect {    
    CGContextRef context        =   UIGraphicsGetCurrentContext();

    CGColorRef whiteColor       =   [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0].CGColor;
    CGColorRef lightGrayColor   =   [UIColor colorWithRed:230.0/255.0 green:230.0/255.0 blue:230.0/255.0 alpha:1.0].CGColor;
    CGColorRef separatorColor   =   [UIColor colorWithRed:208.0/255.0 green:208.0/255.0 blue:208.0/255.0 alpha:1.0].CGColor;

    CGRect paperRect            =   self.bounds;

    // Fill with gradient
    drawLinearGradient(context, paperRect, whiteColor, lightGrayColor);

    // Add white 1 px stroke
    CGRect strokeRect           =   paperRect;
    strokeRect.size.height     -=   1;
    strokeRect                  =   rectFor1PxStroke(strokeRect);

    CGContextSetStrokeColorWithColor(context, whiteColor);
    CGContextSetLineWidth(context, 1.0);
    CGContextStrokeRect(context, strokeRect);

    // Add separator
    CGPoint startPoint          =   CGPointMake(paperRect.origin.x, paperRect.origin.y + paperRect.size.height - 1);
    CGPoint endPoint            =   CGPointMake(paperRect.origin.x + paperRect.size.width - 1, paperRect.origin.y + paperRect.size.height - 1);
    draw1PxStroke(context, startPoint, endPoint, separatorColor);

}

但是,当我尝试在屏幕上显示时,CustomLabelBackGround 的文本正在消失。请看下面的图片作为参考:

在此处输入图像描述

我在这里缺少什么。如果您对此有任何想法,请提供帮助。谢谢

4

5 回答 5

2

您需要致电:

[super drawRect:rect];

为了在绘制其他任何内容之前超级绘制您的文本。然后正常绘制文本

于 2015-09-11T09:43:31.543 回答
1

我会:

  1. 创建一个自定义 UIView,并在那里使用您的 drawRect 代码。
  2. 确保 UILabel 背景设置为 [UIColor clearColor]。
  3. 添加自定义 UILabel 类作为自定义 UIView 类的子视图。

或者就像 Imram 所说的那样,在 Photoshop 或其他图形编辑器程序中将渐变创建为图像,并在那里设置标签背景。就个人而言,我认为这可能是最简单和最可维护的解决方案。

于 2013-04-02T20:25:24.837 回答
1

由于您正在实现drawRectUILabel拥有该图形上下文,因此您基本上是“覆盖”文本,您也可以自己绘制它,或者更简单的方法是拥有一个带有渐变的容器视图和一个透明标签文本。

于 2013-04-02T19:31:36.693 回答
1

最好的方法

  • 创建自定义 UIView
  • 在那里制作这个drawrect
  • 在这个 UILabel 类中,将该类作为背景添加到标签中

否则,您还必须绘制标签内容,因为您要覆盖其drawrect方法

于 2013-04-02T19:32:26.073 回答
1

为什么不在 Photoshop 中预渲染渐变,然后在您的标签上设置:

myLabel.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"myImage"]];
于 2013-04-02T19:47:17.893 回答