0

私の目標は、次のようにして uilabel にグラデーションを追加することです ( CustomLabelBackGroundは UILabel のサブクラスです)

@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

1

私は...するだろう:

  1. カスタム UIView を作成し、そこで drawRect コードを使用します。
  2. UILabel の背景が [UIColor clearColor] に設定されていることを確認してください。
  3. カスタム UIView クラスのサブビューとしてカスタム UILabel クラスを追加します。

または、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 に答える