我想知道如何为UILabel创建文本笔划?有什么办法吗?
谢谢,
#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)];
答案 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