1

UILabel次の画像のように、背景を2色に分割して表示する必要があります。

ここに画像の説明を入力してください

(ここでの色は、下部が黒、上部が50%灰色ですが、これは重要ではありません)。Interface Builderでラベルの背景色を50%グレーに設定してから、コードでこれを実行してみました。

CALayer *sl1 = [[[CALayer alloc] init] autorelease];
sl1.frame = CGRectMake(0, lbl.frame.size.height / 2, lbl.frame.size.width, score1.frame.size.height/2);
sl1.backgroundColor = [[UIColor blackColor] CGColor];
[lbl.layer insertSublayer:sl1 atIndex:0];

残念ながら、これによりテキストの上に黒い部分が描画されるため、ラベルは次のようになります。

ここに画像の説明を入力してください

言うまでもなく、これは私が必要とするものではありません。では、カスタム画像を使用せずにこの背景を取得するにはどうすればよいですか?問題はUILabel、このようなものをいくつかの場所に、異なるサイズで配置する必要があることです。そのため、背景画像の複数のバージョンを作成する必要があります。

何か案は?ありがとう。

4

3 に答える 3

2

これは機能します:

UILabel* myLabel = [[UILabel alloc] initWithFrame:CGRectMake(100, 100, 100, 50)];
myLabel.text = @"Ciao";
myLabel.textColor = [UIColor greenColor];

UIGraphicsBeginImageContext(CGSizeMake(100, 50));   
CGContextRef context = UIGraphicsGetCurrentContext();
// drawing with a gray fill color
CGContextSetRGBFillColor(context,  0.4, 0.4, 0.4, 1.0);
// Add Filled Rectangle, 
CGContextFillRect(context, CGRectMake(0.0, 0.0, 100, 50));

// drawing with a black fill color
CGContextSetRGBFillColor(context,  0., 0., 0., .9);
// Add Filled Rectangle, 
CGContextFillRect(context, CGRectMake(0.0, 25, 100, 25));

UIImage* resultingImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

myLabel.backgroundColor = [UIColor colorWithPatternImage:resultingImage];
[self.view addSubview:myLabel];
于 2012-05-28T10:36:30.063 に答える
1

を使用しUIColorます+colorWithPatternImage:。の高さの画像で 1px を渡すUILabelと、ビューの幅全体に「並べて表示」されます。

myLabel.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"label-background.png"]];
于 2012-05-28T10:18:20.670 に答える
0

まず、グラデーションの背景用にこのようにサブクラス化し、そのメソッドUILabelをオーバーライドする必要がありますdrawRect:

- (void)drawRect:(CGRect)rect 
{
    //////////////GET REFERENCE TO CURRENT GRAPHICS CONTEXT
    CGContextRef context = UIGraphicsGetCurrentContext();

    //////////////CREATE BASE SHAPE WITH ROUNDED CORNERS FROM BOUNDS
CGRect activeBounds = self.bounds;
CGFloat cornerRadius = 10.0f;   
CGFloat inset = 6.5f;   
CGFloat originX = activeBounds.origin.x + inset;
CGFloat originY = activeBounds.origin.y + inset;
CGFloat width = activeBounds.size.width - (inset*2.0f);
CGFloat height = activeBounds.size.height - (inset*2.0f);

CGRect bPathFrame = CGRectMake(originX, originY, width, height);
CGPathRef path = [UIBezierPath bezierPathWithRoundedRect:bPathFrame cornerRadius:cornerRadius].CGPath;

//////////////CREATE BASE SHAPE WITH FILL AND SHADOW
CGContextAddPath(context, path);
CGContextSetFillColorWithColor(context, [UIColor colorWithRed:210.0f/255.0f green:210.0f/255.0f blue:210.0f/255.0f alpha:1.0f].CGColor);
CGContextSetShadowWithColor(context, CGSizeMake(0.0f, 1.0f), 6.0f, [UIColor colorWithRed:0.0f/255.0f green:0.0f/255.0f blue:0.0f/255.0f alpha:1.0f].CGColor);
CGContextDrawPath(context, kCGPathFill);

//////////////CLIP STATE
CGContextSaveGState(context); //Save Context State Before Clipping To "path"
CGContextAddPath(context, path);
CGContextClip(context);

//////////////DRAW GRADIENT
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
size_t count = 3;
CGFloat locations[3] = {0.0f, 0.57f, 1.0f}; 
CGFloat components[12] = 
{   0.0f/255.0f, 0.0f/255.0f, 0.0f/255.0f, 1.0f,     //1
    5.0f/255.0f, 5.0f/255.0f, 5.0f/255.0f, 1.0f,     //2
    10.0f/255.0f, 10.0f/255.0f, 10.0f/255.0f, 1.0f};    //3
CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, components, locations, count);

CGPoint startPoint = CGPointMake(activeBounds.size.width * 0.5f, 0.0f);
CGPoint endPoint = CGPointMake(activeBounds.size.width * 0.5f, activeBounds.size.height);

CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, 0);
CGColorSpaceRelease(colorSpace);
CGGradientRelease(gradient);
}

これは黒から白へのグラデーションの背景を描画しますこれはあなたを助けるでしょう Happy Codding :) 上記のコードはこのサイトからのものですhttp://mobile.tutsplus.com/tutorials/iphone/ios-sdk-uialertview-custom-graphics/

于 2012-05-28T10:20:37.267 に答える