How to change an UILabel/UIFont's letter spacing?

I've searched loads already and couldn't find an answer.

I have a normal UILabel, defined this way:

    UILabel *totalColors = [[[UILabel alloc] initWithFrame:CGRectMake(5, 7, 120, 69)] autorelease];
    totalColors.text = [NSString stringWithFormat:@"%d", total];
    totalColors.font = [UIFont fontWithName:@"Arial-BoldMT" size:60];
    totalColors.textColor = [UIColor colorWithRed:221/255.0 green:221/255.0 blue:221/255.0 alpha:1.0];
    totalColors.backgroundColor = [UIColor clearColor];
    [self addSubview:totalColors];

And I wanted the horizontal spacing between letters, to be tighter, whilst mantaining the font size.

Is there a way to do this? It should be a pretty basic thing to do.

Cheers guys, Андре

ОБНОВЛЕНИЕ:

Так что я был вынужден сделать это так:

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

    CGContextSelectFont (context, "Arial-BoldMT", 60, kCGEncodingMacRoman);
    CGContextSetCharacterSpacing (context, -10);
    CGContextSetTextDrawingMode (context, kCGTextFill);

    CGContextSetRGBFillColor(context, 221/255.0, 221/255.0, 221/255.0, 221/255.0);
    CGAffineTransform xform = CGAffineTransformMake(1.0, 0.0, 0.0, -1.0, 0.0, 0.0);
    CGContextSetTextMatrix(context, xform);

    char* result = malloc(17);
    sprintf(result, "%d", totalNumber);

    CGContextShowTextAtPoint (context, 0, 54, result, strlen(result));
}

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

Я читал об ATSU, но не смог найти никаких примеров.

Это отстой: /

38
задан Andre 30 March 2010 в 14:30
поделиться

2 ответа

Я нашел решение для расстояния между буквами и выравнивания по правому краю.

Вот оно:

    NSString *number = [NSString stringWithFormat:@"%d", total];

    int lastPos = 85;

    NSUInteger i;
    for (i = number.length; i > 0; i--)
    {
        NSRange range = {i-1,1};
        NSString *n = [number substringWithRange:range];

        UILabel *digit = [[[UILabel alloc] initWithFrame:CGRectMake(5, 10, 35, 50)] autorelease];
        digit.text = n;
        digit.font = [UIFont fontWithName:@"Arial-BoldMT" size:60];
        digit.textColor = [UIColor colorWithRed:221/255.0 green:221/255.0 blue:221/255.0 alpha:1.0];
        digit.backgroundColor = [UIColor clearColor];
        [self addSubview:digit];

        CGSize textSize = [[digit text] sizeWithFont:[digit font]];
        CGFloat textWidth = textSize.width;

        CGRect rect = digit.frame;
        rect.origin.x = lastPos - textWidth;
        digit.frame = rect;

        lastPos = rect.origin.x + 10;
    }

Расстояние между буквами - «10» в последней строке. Выравнивание происходит от lastPos.

Надеюсь, это поможет кому угодно.

8
ответ дан 27 November 2019 в 03:39
поделиться

Нет ни в одной общедоступной версии iPhone OS. ;-) Если вы в настоящее время являетесь разработчиком iPhone, вы можете получить представление о том, что происходит с iPhone OS, просмотрев примечания «Что нового» для iPhone OS 3.2.

Обновление: iOS v3.2, в которой добавлена ​​поддержка кернинга, все еще находилась под соглашением о неразглашении, когда я опубликовал это. Для получения актуального ответа см. Как установить кернинг в iPhone UILabel .

0
ответ дан 27 November 2019 в 03:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: