Как сделать так, чтобы UILabel отображал выделенный текст?

Все, что я хочу, это черная граница в один пиксель вокруг моего белого текста UILabel.

Я дошел до подкласса UILabel с приведенным ниже кодом, который я неуклюже собрал воедино из нескольких косвенно связанных онлайн примеров. И это работает, но это очень, очень медленно (за исключением симулятора), и я не мог заставить его также центрировать текст по вертикали (так что я жестко закодировал значение y на последней строке временно). Ааааа!

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

У меня просто есть ноющее чувство, что я упускаю простой способ сделать это. Возможно, переопределив «drawTextInRect», но, похоже, я не могу заставить drawTextInRect согнуться под мою волю, несмотря на то, что пристально на него смотрю и хмуро хмурится.

Ответы на вопрос(12)

Ваш ответ на вопрос