Как добиться фонового изображения в UILabel как на рис? - PullRequest
3 голосов
/ 27 декабря 2011

Как добиться нижеприведенного эффекта ??

Я хочу, чтобы при ширине UIImage ширине UILabel мое изображение отображалось только один раз, как показано ниже.

Я уже проделал дополнительную работу с UILabel и UIImage. Обратитесь к моему предыдущему вопросу: Как растянуть изображение, чтобы заполнить ширину метки, заданную в Background в UILabel? .

Но теперь я хочу повеселиться с UILabel ...: D

UILabel with small Image than width repeats only once...

РЕДАКТИРОВАТЬ:

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];

Ответы [ 3 ]

0 голосов
/ 27 декабря 2011

Кажется, что самым простым решением было бы, чтобы ваш UIImage сидел позади вашего UILabel, а ваш UILabel имел прозрачный фоновый цвет.

Редактировать

Предполагается, что вы используете 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

Вам потребуется вызвать этот метод установки после добавления UILabel в родительское представление.Я не тестировал, но считаю, что он должен работать, может потребоваться некоторые настройки, но, надеюсь, он объясняет, как создать подкласс UILabel для пользовательского улучшения, такого как этот.

0 голосов
/ 27 декабря 2011

Подкласс UILabel может выглядеть следующим образом (без 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

Использование

yourCustomLabel.image = [UIImage imageNamed:@"test.png"];
0 голосов
/ 27 декабря 2011
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];
}
...