1

UIViewをサブクラス化し、4つのUILabelを重ねて配置したいと思います。トップラベルはMASK、2番目のラベルはテキスト付きの通常のラベル、3番目のラベルはテキストのない無地の背景のラベルになります。下のラベルは、異なる色のフォントで上の2番目のラベルと同じになります。3番目のラベルの幅を送信すると、下のラベルが覆われ、テキストの一部が表示されます。2番目のテキストを1つの色にし、カバーされていない下部のラベルに別の色のフォントを表示させたい。

これは可能ですか?誰かがObjective-Cでマスクする方法を説明できれば、それも役に立ちます。

プログレスバーのように機能するUIViewを作成しようとしています。バーが60%まで塗りつぶされているため、下部のテキストが別の色で表示されているときに、上部のテキストを白いフォントの色で表示したいと思います。

4

2 に答える 2

2

2つのUILabelを使用してこれを行うことができます。1つは下部にあり、もう1つは上部の別のビューに埋め込まれています。

UILabel *bottomLabel = ...;
[self.view addSubview:bottomLabel];

UIView *topContainer = [[UIView alloc] initWithFrame:bottomLabel.frame];
topContainer.clipsToBounds = YES;
topContainer.opaque = NO;
topContainer.backgroundColor = [UIColor clearColor];

UILabel *topLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, bottomLabel.frame.size.width, bottomLabel.frame.size.height)];
topLabel.text = bottomLabel.text;
topLabel.opaque = NO;
topLabel.backgroundColor = [UIColor clearColor];

[topContainer addSubview:topLabel];
[self.view addSubview:topContainer];

次に、進行状況を変更する場合は、の幅を設定しますtopContainer。これはクリップする必要がありますtopLabel

于 2011-02-16T15:35:51.010 に答える
0

4つのUILabelを使用するのではなく、UILabelをサブクラス化して、drawRect:メソッドで自分で描画してみませんか?次のようになります。

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

    // Set the mask
    CGContextClipToMask(context, self.bounds, /* mask image */);

    // Draw the text in a different font
    [self.text drawInRect:rect withFont:/* alternate font */];

    // Draw a solid background
    CGContextSetRGBFillColor(context, ...);
    CGContextFillRect(context, rect);

    // Draw the text normally
    [super drawRect:rect];
}

便宜上、サブクラスのマスキング画像と代替フォントプロパティを作成できます。

于 2011-02-16T15:35:49.740 に答える