uilabel有轮廓或中风

时间:2011-02-23 16:01:26

标签: ios4 uilabel iphone

我想知道如何为UILabel创建文本笔划?有什么办法吗? enter image description here

谢谢,

#import <Foundation/Foundation.h>


@interface CustomLabel : UILabel {

 }

 @end

#import "CustomLabel.h"


@implementation CustomLabel

- (void)drawTextInRect:(CGRect)rect {

    CGSize shadowOffset = self.shadowOffset;
    UIColor *textColor = self.textColor;

    CGContextRef c = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(c, 22);

    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;
    //works fine with no warning 
}   

现在问题是如何在不同的viewcontrollers上使用带有IBOutlet标签的子类。是对的:

    label = [[CustomLabel alloc] initWithFrame:CGRectMake(0, 0, 190, 190)];

2 个答案:

答案 0 :(得分:3)

根据字体和字符的不同,添加以下内容可能会有所帮助:

CGContextSetLineJoin(c,kCGLineJoinRound);

可以防止因太大的笔触而产生的瑕疵太过尖锐。

答案 1 :(得分:0)

此实施存在一个问题。使用笔划绘制文本的字符字形宽度与绘制没有笔划的文本略有不同,这会产生“未中心”的结果。你可以通过在填充文本周围添加一个不可见的笔划来解决这个问题。

你应该替换:

CGContextSetTextDrawingMode(c, kCGTextFill);
self.textColor = textColor;
self.shadowOffset = CGSizeMake(0, 0);
[super drawTextInRect:rect];

使用:

CGContextSetTextDrawingMode(context, kCGTextFillStroke);
self.textColor = textColor;
[[UIColor clearColor] setStroke]; // invisible stroke
self.shadowOffset = CGSizeMake(0, 0);
[super drawTextInRect:rect];

我不是百分百肯定,如果这是真正的交易,因为我不知道self.textColor = textColor;是否与[textColor setFill]具有相同的效果,但你明白了。

披露:我是THLabel的开发者。

我刚刚发布了一个UILabel子类,它允许在文本和其他效果中使用大纲。您可以在此处找到它:https://github.com/tobihagemann/THLabel