自定义字体。保持字体宽度相同

时间:2010-05-13 08:32:17

标签: iphone

我正在尝试使用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;

}

}

在输出'我的名字是亚当'被打印但字母之间的空格不均匀。!!有什么方法可以让空间变得均匀!

2 个答案:

答案 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*)?