Tek istediğim beyaz UILabel metnimin etrafındaki bir piksellik siyah kenarlık.
UILabel'i aşağıdaki kodla alt sınıfa ayırmaya kadar gittim, bunu birkaç teğetsel olarak ilgili çevrimiçi örnekten beceriksizce bir araya getirdim. Ve çalışıyor ama çok, çok yavaş (simülatör dışında) ve metni dikey olarak ortalayamıyorum (bu yüzden son satırdaki y değerini geçici olarak sabit kodladım). 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]);
}
Bunu yapmanın daha basit bir yolunu gözden kaçırdığıma dair dırdırcı bir his var. Belki de "drawTextInRect" i geçersiz kılarak, ama buna dikkatle bakıp gerçekten sert bir şekilde kaşlarını çatmasına rağmen drawTextInRect'in irademe boyun eğmesini sağlayamıyorum.