Ich möchte nur einen schwarzen Rand von einem Pixel um meinen weißen UILabel-Text.
Ich bin so weit gekommen, UILabel mit dem folgenden Code zu unterklassifizieren, den ich aus einigen tangential verwandten Online-Beispielen ungeschickt zusammengeschustert habe. Und es funktioniert, aber es ist sehr, sehr langsam (außer im Simulator) und ich konnte es auch nicht dazu bringen, den Text vertikal zu zentrieren (also habe ich den y-Wert in der letzten Zeile vorübergehend fest codiert). 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]);
}
Ich habe nur das quälende Gefühl, dass ich einen einfacheren Weg übersehe, dies zu tun. Vielleicht durch Überschreiben von "drawTextInRect", aber ich kann drawTextInRect anscheinend nicht dazu bringen, sich meinem Willen zu beugen, obwohl ich es aufmerksam anstarrte und wirklich sehr, sehr hart die Stirn runzelte.