使用CGContextShowTextAtPoint显示文本会绘制奇怪的文本

时间:2013-02-05 21:50:26

标签: ios xcode text sdk cgcontext

我只是试图在UIImage中叠加文本(使用CGContext),但它没有显示我指定的文本。在这段代码中,我将作为文本参数"Hello"给出,但它显示“eÉääc”。我不知道发生了什么我认为角色已经被取代但我不知道如何解决它。 这是我的代码:

UIGraphicsBeginImageContextWithOptions(image.size, YES, 0);
CGContextRef c = UIGraphicsGetCurrentContext();
[image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height)];
CGContextSetTextMatrix(c, CGAffineTransformMake(1.0, 0, 0, -1.0, 0, 0));
CGContextSelectFont(c, "ArialMT", 50, kCGEncodingFontSpecific);
CGContextSetRGBStrokeColor(c, 255, 0, 0, 1);
CGContextSetRGBFillColor(c, 255, 0, 0, 1);
CGContextSetCharacterSpacing(c, 2);
CGContextShowTextAtPoint(c,100,100, "Hello", 5);
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

我正在使用西班牙语键盘(我不知道这是否重要)和iPad(我正在测试应用程序)是加泰罗尼亚语。

1 个答案:

答案 0 :(得分:0)

CGContextShowTextAtPoint()根据指定的CGContextSelectFont编码参数解释给定的文本。您选择了kCGEncodingFontSpecific,这是字体内置编码(无论可能是什么)。

唯一的另一个选择是kCGEncodingMacRoman

CGContextSelectFont(c, "ArialMT", 50, kCGEncodingMacRoman);

然后,只要您只使用ASCII字符集中的字符,您的文本就会正确显示。

对于非ASCII字符,您必须将字符串转换为MacRoman编码,请参阅例如https://stackoverflow.com/a/13743834/1187415举个例子。

请注意CGContextShowTextAtPoint 无法显示常规Unicode字符串,甚至还有欧元(€)字符问题。 drawAtPoint:withFont:的{​​{1}}方法没有这些限制。