Как нарисовать UILabel в -drawRect:?

Должен ли я также делать все это сумасшедшее преобразование системы координат здесь, или UILabel отличается от рисунка UIImageView в -drawRect:?

Для этого существует метод - (void)drawTextInRect:(CGRect)rect.

НО в документации говорится: "Вы не должны вызывать этот метод напрямую. Этот метод следует переопределять только подклассами, которые хотят изменить поведение чертежа по умолчанию для текста меток".

Так? Как нарисовать его затем в -drawRect:?

Ответ 1

Если вы выполняете собственный чертеж в своем представлении, вы не должны рисовать UILabel или другой элемент пользовательского интерфейса, а скорее рисовать текст. NSString имеет несколько методов для рисования в текущем контексте (смотрите дополнительные документы NICStline UIKit для получения дополнительных методов):

- (CGSize)drawInRect:(CGRect)rect withFont:(UIFont *)font
- (CGSize)drawAtPoint:(CGPoint)point withFont:(UIFont *)font

Ответ 2

UILabel отличается тем, что вам не нужно вручную рисовать текст, чтобы изменить способ его отображения. Подклассификация UILabel и переопределение -drawTextInRect: - это самый быстрый способ изменить способ отображения UILabel. Например,

- (void)drawTextInRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetShadowWithColor( context, shadowOffset, shadowRadius, [shadowColor CGColor] );   
    [super drawTextInRect:rect];
}

добавит тень со специфическим смещением, радиусом и цветом (как экземпляр UIColor) к любому тексту, который вы рисуете в этой UILabel. Для примера этого в действии см. проект, который я собрал для недавнего класса.

Однако, если то, что вы хотите сделать, это просто нарисовать текст в другом представлении, ответ Владимира - это путь.

Ответ 3

Собственно, вы можете это сделать.

Попробуйте следующее:

UILabel *lblRef = [[UILabel alloc] initWithFrame:CGRectMake(x, y, width, height)];
lblRef.text = [refs objectAtIndex:barCount];
lblRef.adjustsFontSizeToFitWidth = TRUE;
lblRef.adjustsLetterSpacingToFitWidth = TRUE;
lblRef.textColor = self.color;
[lblRef setTextAlignment:NSTextAlignmentCenter];
lblRef.backgroundColor = [UIColor clearColor];
[self addSubview:lblRef];