2010-04-23 18 views
10

¿Debo hacer también todo este trabajo de conversión de sistema de coordenadas loco aquí, o es un UILabel diferente de un dibujo de UIImageView en -drawRect:? Para obtenerlo, hay un método llamado - (void)drawTextInRect:(CGRect)rect.Cómo dibujar un UILabel en -drawRect :?

PERO la documentación dice: "No debe llamar directamente a este método. Este método solo debe ser reemplazado por subclases que deseen modificar el comportamiento de dibujo predeterminado para el texto de la etiqueta".

Entonces? Cómo dibujarlo en -drawRect :?

Respuesta

15

Si realiza un dibujo personalizado en su vista, no debe dibujar UILabel u otro elemento de UI sino dibujar el texto. NSString tiene varios métodos para la elaboración en el contexto actual (ver documentos de extensión UIKit de NSString para más métodos):

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

Hey estoy viniendo iOS 7 y ambos de estos métodos han quedado en desuso, junto con casi todos los métodos de dibujo NSString' '. ¿Sabes cómo funciona 'drawAtPoint: withAttributes:'? –

17

UILabel es diferente, ya que no es necesario dibujar manualmente texto para modificar la forma en que se presenta. La subclase de UILabel y la anulación de -drawTextInRect: es la forma más rápida de alterar la forma en que se representa un UILabel. Por ejemplo,

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

añadirá una sombra con un determinado desplazamiento, radio y color (como un ejemplo UIColor) a cualquier texto que se dibuja en el que UILabel. Para ver un ejemplo de esto en acción, vea a project I put together for a recent class.

Sin embargo, si lo que estás buscando hacer es simplemente dibujar texto dentro de otra vista, la respuesta de Vladimir es el camino a seguir.

+0

desafortunadamente, al hacerlo, el camino de Vladimir no funcionará muy bien. UILabel tiene una lógica inteligente para calcular el tamaño contraído del texto cuando no se ajusta a la etiqueta. Vea mis otras preguntas, no pude reproducir esa lógica debido a errores en los métodos proporcionados. Pero gracias de todos modos. – dontWatchMyProfile

+0

Por cierto, su enlace parece estar roto – dontWatchMyProfile

+0

@mystify - Lo siento, hipo del servidor web menor. Pruebalo ahora. –

0

En realidad, puedes hacerlo.

Prueba esto:

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