7

我想使用显示“无穷大”符号

CGContextSelectFont(context, "HelveticaNeue", textSize, kCGEncodingMacRoman);    
CGContextShowTextAtPoint(context, myCenter.x, myCenter.y + textHeight, [sName     cStringUsingEncoding:NSMacOSRomanStringEncoding], [sName length]); 

它显示为方形框或圆形。我发现这个符号是十六进制格式的十进制 176 和 221E。我正在使用 Helvetica 作为我的字体,并且尝试过其他没有运气的字体。这是我使用的编码有问题吗?

4

4 回答 4

12

原来CGContextSelectFont只支持MacRoman编码,基本上只有一小部分字符。为了在字符串中显示 Unicode 字符,您必须使用 CGSetFont 或 Cocoa 绘图系统。CGSetFont 要求您无论如何都使用 Cocoa 将字符映射到字形,然后使用 CGContextShowGlyphsAtPoint 绘制字形。如果您确实需要显示 Unicode 字符,我建议您研究绘制这些字符串的其他方法。

这段代码基本上会显示无穷大符号:

- (void)drawRect:(CGRect)rect {
    unichar inf = 0x221E; // infinity symbol
    NSString* sName = [[NSString alloc] initWithCharacters:&inf length:1];
    UIFont* font = [UIFont fontWithName:@"Helvetica" size:32.0];
    [sName drawInRect:CGRectMake(20, 20, 40, 40)
             withFont:font];
    [sName release];
}

另请注意,在 iPhone(和 Mac)上,Helvetica Neue 实际上并不存在……它的名称只是映射回标准的 Helvetica。有关iPhone 上可用字体的更多信息,请参阅http://daringfireball.net/misc/2007/07/iphone-osx-fonts上的表格。

于 2008-11-09T00:51:22.723 回答
2

值得注意的是,您仍然可以将 CGContext 函数与 -[NSString drawWithRect:] 及其表兄弟一起使用。例如,下面的代码用 50% 不透明的黑色绘制一个字符串(可以包括任何字符,包括启动此线程的无穷大符号):

CGContextSaveGState(context);
CGContextSetRGBFillColor(context, 0, 0, 0, 0.5);
[self.text drawInRect:targetRect withFont:self.font];
CGContextRestoreGState(context);
于 2008-12-25T08:01:11.860 回答
1

这是 MonoTouch 的答案:

UIGraphics.PushContext (mBmpContext);
mBmpContext.SetRGBFillColor(1f,1f,1f,1f);
var font = UIFont.FromName ("Arial", 30);
using (var nsstr = new NSString ("äöü ÜÖÄ")){
   nsstr.DrawString (new PointF (10, 400), font);
}
UIGraphics.PopContext ()
于 2013-06-26T22:49:50.797 回答
0

你想避免 drawInRect:withFont: (in MonoTouch: DrawString (string, RectangelF, UIFont font) 因为这个 API 在 iPhoneOS 4.0 之前不会渲染可能包含某些 unicode 字符(如 dingbats)的字符串,并且会在那个时候默默地削减渲染.

相反,您必须使用 drawInRect:withFont:lineBreakMode:alignment: (在 MonoTouch 中,这是 DrawString (string msg, RectangleF rect, UIFont font, UILineBreakMode breakMode, UITextAlignment align) 方法),因为它可以正确呈现。

另外,并非iPhone上的所有字体都是一套完整的字体,可以参考以下:

http://daringfireball.net/misc/2007/07/iphone-osx-fonts

对于具有完整字符集的字体列表。

于 2010-07-22T04:26:21.930 回答