我正在寻找在UIView上绘制有边框的文字。
实施以下方法:
- (void)drawRect:(CGRect)rect {
//TODO draw bordered text here.
}
如何画画?
我的意思是每个字母都以全文为边界。
提前致谢。
答案 0 :(得分:1)
要显示带边框的文本(如果我理解正确的话),您应该将文本绘制模式设置为kCGTextFillStroke
(并为文本绘制参数设置适当的值,例如笔触和填充颜色等)
// Choose appropriate text font
CGContextSelectFont(context, [[UIFont boldSystemFontOfSize:24].fontName UTF8String], (int)fontSize, kCGEncodingMacRoman);
// Set text drawing mode
CGContextSetTextDrawingMode(context, kCGTextFillStroke);
// Set appropriate color/line width values
// Here we're set to draw white letters with black border
CGContextSetRGBStrokeColor(context, 0, 0, 0, 1);
CGContextSetRGBFillColor(context, 1, 1, 1, 1);
CGContextSetLineWidth(context, 1);
// Set this transformations or text will be displayed upside-down
CGAffineTransform xform = CGAffineTransformMake(1.0, 0.0, 0.0, -1.0, 0.0, 0.0);
CGContextSetTextMatrix(context, xform);
// Display text
CGContextShowTextAtPoint(...);
编辑:由于Quartz不能很好地使用unicode,要绘制unicode字符串,您需要使用其他API。我设法使用NSAttributedString和OHAttributedLabel
绘制“有边界”的unicode字符串(感谢this answer用于该自定义控件)。用于在某个视图控制器中获取所需字符串的示例代码:
- (void)viewDidLoad
{
[super viewDidLoad];
NSMutableAttributedString *s = [[NSMutableAttributedString alloc] initWithString:@"您好世界"];
[s addAttributes:[NSDictionary dictionaryWithObject:[NSNumber numberWithFloat:-3.0f] forKey:(NSString*)kCTStrokeWidthAttributeName]
range:NSMakeRange(0, [s length])];
[s addAttributes:[NSDictionary dictionaryWithObject:(id)[UIColor greenColor].CGColor forKey:(NSString*)kCTStrokeColorAttributeName]
range:NSMakeRange(0, [s length])];
[s addAttributes:[NSDictionary dictionaryWithObject:(id)[UIColor redColor].CGColor forKey:(NSString*)kCTForegroundColorAttributeName]
range:NSMakeRange(0, [s length])];
[s setFont:[UIFont boldSystemFontOfSize:28.0f]];
[s setTextColor:[UIColor redColor]];
OHAttributedLabel *l = [[OHAttributedLabel alloc] initWithFrame:CGRectMake(40.0f, 40.0f, 200.0f, 80.0f)];
l.centerVertically = YES;
[l setAttributedText: s];
[self.view addSubview: l];
[l release];
}
请注意,您需要与CoreText.framework链接才能使其正常工作,并且代码使用OHAttributedLabel
实现中提供的一些便捷方法
答案 1 :(得分:0)
我试过这种方式: 使用NSString drawAtPoint绘制:withFont:或drawInRect:withFont:
将线关节和lin cap设置为圆形。
使用绘图模式kCGTextStroke以边框颜色绘制文本,请务必将线宽设置得稍宽,
然后使用绘图模式kCGTextFill以内部颜色绘制文本。
可能需要对位置进行一些调整才能使其完美。