Jak sprawić, by UILabel wyświetlał zarysowany tekst?

Wszystko, czego chcę, to czarna pikselka wokół mojego białego tekstu UILabel.

Doszedłem do podklasy UILabel z poniższym kodem, który niezgrabnie brukowałem razem z kilku stycznie powiązanych przykładów online. I działa, ale jest bardzo, bardzo powolny (z wyjątkiem symulatora) i nie mogłem go zmusić do wyśrodkowania tekstu w pionie (więc na stałe zakodowałem wartość y na ostatniej linii). 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]);
}

Po prostu mam dokuczliwe uczucie, że pomijam prostszy sposób na to. Być może przez nadpisanie „drawTextInRect”, ale nie wydaje mi się, żeby drawTextInRect w ogóle zgiął się do mojej woli, mimo że wpatrywał się w nią uważnie i marszczył brwi naprawdę bardzo ciężko.

questionAnswers(12)

yourAnswerToTheQuestion