如何使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]);

}

我只是有点a愧的感觉,我正在忽略一种更简单的方法来执行此操作。也许是通过覆盖“ drawTextInRect”,但是尽管专心地盯着它并且真的皱着眉头,但我似乎根本无法使drawTextInRect屈服于我的意愿。


catspeake
浏览 570回答 3
3回答

POPMUISE

我能够通过重写drawTextInRect来做到这一点:- (void)drawTextInRect:(CGRect)rect {  CGSize shadowOffset = self.shadowOffset;  UIColor *textColor = self.textColor;  CGContextRef c = UIGraphicsGetCurrentContext();  CGContextSetLineWidth(c, 1);  CGContextSetLineJoin(c, kCGLineJoinRound);  CGContextSetTextDrawingMode(c, kCGTextStroke);  self.textColor = [UIColor whiteColor];  [super drawTextInRect:rect];  CGContextSetTextDrawingMode(c, kCGTextFill);  self.textColor = textColor;  self.shadowOffset = CGSizeMake(0, 0);  [super drawTextInRect:rect];  self.shadowOffset = shadowOffset;}
打开App,查看更多内容
随时随地看视频慕课网APP