Todo lo que quiero es un borde negro de un píxel alrededor de mi texto UILabel blanco.
Llegué a subclasificar UILabel con el siguiente código, que improvisé torpemente a partir de algunos ejemplos en línea relacionados tangencialmente. Y funciona, pero es muy, muy lento (excepto en el simulador) y tampoco pude conseguir que centre el texto verticalmente (así que codifiqué temporalmente el valor y en la última línea). ¡Ahhhh!
void ShowStringCentered(CGContextRef gc, float x, float y, const char *str) {
CGContextSetTextDrawingMode(gc, kCGTextInvisible);
CGContextShowTextAtPoint(gc, 0, 0, str, strlen(str));
CGPoint pt = CGContextGetTextPosition(gc);
CGContextSetTextDrawingMode(gc, kCGTextFillStroke);
CGContextShowTextAtPoint(gc, x - pt.x / 2, y, str, strlen(str));
}
- (void)drawRect:(CGRect)rect{
CGContextRef theContext = UIGraphicsGetCurrentContext();
CGRect viewBounds = self.bounds;
CGContextTranslateCTM(theContext, 0, viewBounds.size.height);
CGContextScaleCTM(theContext, 1, -1);
CGContextSelectFont (theContext, "Helvetica", viewBounds.size.height, kCGEncodingMacRoman);
CGContextSetRGBFillColor (theContext, 1, 1, 1, 1);
CGContextSetRGBStrokeColor (theContext, 0, 0, 0, 1);
CGContextSetLineWidth(theContext, 1.0);
ShowStringCentered(theContext, rect.size.width / 2.0, 12, [[self text] cStringUsingEncoding:NSASCIIStringEncoding]);
}
Solo tengo la persistente sensación de que estoy pasando por alto una forma más sencilla de hacer esto. Quizás anulando "drawTextInRect", pero parece que no puedo conseguir que drawTextInRect se doble a mi voluntad a pesar de mirarlo fijamente y fruncir el ceño muy, muy duro.