¿Cómo lograr una image de background en UILabel como en una foto?

¿Cómo lograr abajo el efecto?

Quiero que cuando mi ancho de UIImage sea ​​más UILabel ancho de UILabel entonces mi image debería mostrarse una sola vez a continuación.

Ya he hecho más trabajo con UILabel y UIImage . Consulte mi pregunta anterior: ¿Cómo estirar la image para llenar el ancho de label establecido en Antecedentes en UILabel? .

Pero ahora quiero algo más divertido con UILabel …: D

UILabel con una imagen pequeña que el ancho se repite solo una vez ...

EDITAR:

 SBLabel *lbl = [[SBLabel alloc] initWithFrame:CGRectMake(0, 50, 320, 28)]; lbl.text = @"Hello World!!!..."; UIImage *img = [UIImage imageNamed:@"cn3.png"]; UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 50, 320, 28)]; imgView.image = img; [lbl setNonRepeatingBackgroundImage:imgView]; [self.view addSubview:lbl]; [imgView release]; 

 if (image.size.width < label.size.width ||image.size.height < label.size.height ) { //rect here is frame of image [img drawInRect:rect]; label.backgroudColor = [UIColor clearColor]; } 

Parece que la solución más sencilla sería tener su UIImage sentado detrás de su UILabel y su UILabel tiene un color de background transparente.

Editar

Suponiendo que estás usando ARC …

SBLabel.h

 #import <UIKit/UIKit.h> @interface SBLabel : UILabel @property (nonatomic, strong) UIImageView *nonRepeatingBackgroundImage; @end 

SBLabel.m

 #import "SBLabel.h" @implementation SBLabel @synthesize nonRepeatingBackgroundImage; - (void)setNonRepeatingBackgroundImage:(UIImageView *)aNonRepeatingBackgroundImage { nonRepeatingBackgroundImage = aNonRepeatingBackgroundImage; [self addSubview:aNonRepeatingBackgroundImage]; [self sendSubviewToBack:aNonRepeatingBackgroundImage]; [self setBackgroundColor:[UIColor clearColor]]; } @end 

Debería llamar a este método setter después de agregar la UILabel a la vista principal. No he probado, pero creo que debería funcionar, podría requerir algunos ajustes pero, con suerte, explica cómo Subclass UILabel realizar una mejora personalizada como esta.

Una subclass de UILabel podría verse así (sin ARC)

CustomLabel.h

 #import <UIKit/UIKit.h> @interface CustomLabel : UILabel { UIImage *mImage; } @property (retain) UIImage *image; @end 

CustomLabel.m

 #import "CustomLabel.h" @implementation CustomLabel - (void)dealloc { self.image = nil; [super dealloc]; } - (void)drawRect:(CGRect)rect { [mImage drawAtPoint:CGPointMake(0, 0)]; [super drawRect:rect]; } - (UIImage*)image { return mImage; } - (void)setImage:(UIImage *)image { self.backgroundColor = [UIColor clearColor]; if(mImage) [mImage release]; mImage = [image retain]; [self setNeedsDisplay]; } @end 

Uso

 yourCustomLabel.image = [UIImage imageNamed:@"test.png"];