Yang saya inginkan hanyalah batas hitam satu piksel di sekitar teks UILabel putih saya.
Saya sampai pada subclassing UILabel dengan kode di bawah ini, yang dengan kikuk saya susun dari beberapa contoh online yang berhubungan secara tangensial. Dan itu berhasil tetapi sangat, sangat lambat (kecuali di simulator) dan saya juga tidak bisa membuatnya memusatkan teks secara vertikal (jadi saya melakukan hardcode nilai y pada baris terakhir untuk sementara). 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]);
}
Saya hanya memiliki perasaan yang mengganggu bahwa saya mengabaikan cara yang lebih sederhana untuk melakukan ini. Mungkin dengan menimpa "drawTextInRect", tapi sepertinya saya tidak bisa membuat drawTextInRect tunduk pada keinginan saya sama sekali meskipun menatapnya dengan saksama dan mengerutkan kening sangat keras.