我正在尝试使用quartz 2d绘制一个字符串。
我正在做的是,我正在单独绘制字符串的每个字母,因为每个字母都有与之关联的特殊属性,方法是将每个字母写入一个新字符串。
字符串被打印,但字母之间的空格不均匀。看起来很丑陋。 我读了一些关于使用自定义字体的内容。但我不知道,如果我能做到!! 我的代码在这里。
- (void) drawRect : (CGRect)rect{
NSString *string=@"My Name Is Adam";
float j=0;
const char *charStr=[string cStringUsingEncoding: NSASCIIStringEncoding];
for(int i=0;i<strlen(charStr);i++)
{
NSString *str=[NSString stringWithFormat:@"%c",charStr[i]];
const char *s=[str cStringUsingEncoding:NSASCIIStringEncoding];
NSLog(@"%s",s);
CGContextRef context=[self getMeContextRef];
CGContextSetTextMatrix (context,CGAffineTransformMakeScale(1.0, -1.0)) ;
CGContextSelectFont(context, "Arial", 24, kCGEncodingMacRoman);
//CGContextSetCharacterSpacing (context, 10);
CGContextSetRGBFillColor (context, 0,0,200, 1);
CGContextSetTextDrawingMode(context,kCGTextFill);
CGContextShowTextAtPoint(context, 80+j,80,s,1);
j=j+15;
}
}
在输出'我的名字是亚当'被打印但字母之间的空格不均匀。!!有什么方法可以让空间变得均匀!
答案 0 :(得分:1)
使用非比例/固定宽度的字体,如Monaco或Courier。让我知道结果。
答案 1 :(得分:1)
一般来说,每个角色都有不同的进展,所以在绘制文字时应该考虑到它。不要使用j
,请执行以下操作:
// ...
CGContextSetTextPosition(initX,initY);
for(...){
// ...
CGPoint pos = CGContextGetTextPosition(context);
CGContextSetTextPosition(pos.x+extraSpace,pos.y);
CGContextShowText(context,s,1);
// ...
}
将extraSpacing
设置为零以获取字体的默认间距。
此外,我不确定您使用的属性,但为什么不使用NSAttributedString
(或CF*
)?