iOS: UILabel с рамкой вокруг каждой буквы текста - PullRequest
1 голос
/ 28 июня 2011

Я пытаюсь нарисовать границу / контур вокруг каждой буквы текста, чтобы текст выделился.Тени для меня недостаточно.Я посмотрел на другой вопрос, но он использовал Quartz только для того, чтобы нарисовать границу вокруг контура текстового поля, а не самого текста.Есть ли относительно простой способ добавить границу для текста или несколько наборов теней для текста?

Ответы [ 3 ]

3 голосов
/ 29 ноября 2012

Вы можете создать подкласс класса UILabel и переопределить метод drawInRect следующим образом:

- (void)drawRect:(CGRect)rect {

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSaveGState(context);

    CGContextSetLineWidth(context, 2);
    CGContextSetLineJoin(context, kCGLineJoinRound);

    CGContextSetTextDrawingMode(context, kCGTextStroke);

    [self drawTextInRect:rect];
}
3 голосов
/ 28 июня 2011

Когда вы применяете тень к метке, каждая буква получает тень вокруг нее. Так, например, заголовки разделов по умолчанию в сгруппированной таблице отрисовываются так, чтобы выглядеть тиснеными.

Итак, как вы можете

label.layer.shadowColor ...
etc

Вы можете сделать

label.layer.borderColor = [UIColor redColor].CGColor;
label.layer.borderWidth = 2;

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

В любом случае, попробуй. Если это не работает, и это фактически «граница» вокруг каждой буквы , которую вы хотите, вам, возможно, придется использовать тонкую тень с очень контрастным цветом (от вашего цвета текста) для достижения основной момент, который вы желаете.

Используйте любой из этих эффектов слоя, вам нужно

#import <QuartzCore/QuartzCore.h>

Удачи! Доложить. : -)

РЕДАКТИРОВАТЬ: Если вы просто хотите, чтобы вокруг вашей метки была прямоугольная рамка, вам придется встроить вашу метку в UIView и применить к ней границу, используя свойства layer.borderXXX вида (как указано выше).

1 голос
/ 30 июля 2012

Или же вы можете сделать подкласс UILable и рисовать все, что хотите в методе drawRect

Вы можете использовать следующие строки, чтобы найти ширину и высоту текста

CGSize textSize = [[self text] sizeWithFont:[self font]];
    [[UIColor blackColor] set];
CGFloat strikeWidth = textSize.width;
    CGFloat strikeHeight=textSize.height;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...