[objective-c]unicode 符号印刷与之前 ° ¬ 签名时使用 CGContextShowTextAtPoint 打印

发布时间: 2016/10/4 2:27:22
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我要打印 ° 或 µ 我使用 CGContextShowTextAtPoint 调用的视图上。如图所示的代码行。

int number = 100;
NSString *theText2 = [NSString stringWithFormat:@"%d°", number];
CGContextShowTextAtPoint(context, 10, 5, [theText2 cStringUsingEncoding:NSUTF8StringEncoding], [theText2 length]);

这个输出出来的就是

"100¬"

如果我增加字符串的长度它打印显示以下内容

"100¬ °"

预期的输出应该是︰

"100 °"

这当然必须做一些与印刷的 unicode 字符。

解决方法 1:

CGContextShowTextAtPoint 你要转换的字符串中指定的编码 CGContextSelectFont 。最有可能这是编码的"Mac 罗马"。的最后一个参数 CGContextShowTextAtPoint转换字符串,不是的长度长度是 NSString :

CGContextSelectFont(context, "Helvetica", 10.0, kCGEncodingMacRoman);

int number = 100;
NSString *theText2 = [NSString stringWithFormat:@"%d°µ", number];
const char *s = [theText2 cStringUsingEncoding:NSMacOSRomanStringEncoding];
CGContextShowTextAtPoint(context, 10, 5, s, strlen(s));

请注意,这工作,只要你使用来自"Mac 罗马"字符字符设置。 (和它也不适用于 Mac 罗马编码中的一些历史变化欧元字符)。

对于一般的 Unicode 字符串 NSString 方法 drawAtPoint:withFont: 可能会更适合。

官方微信
官方QQ群
31647020