Как нарисовать 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];