我正在使用 CGContextShowTextAtPoint 绘制一个字符串。因此我需要将我想要绘制的 NSString 转换为 c 字符串。不幸的是,诸如欧元货币符号之类的特殊符号未正确显示。
CGContextSelectFont(currentContext, "TrebuchetMS", 15, kCGEncodingMacRoman);
CGContextShowTextAtPoint(currentContext, 0, 0, [myString cStringUsingEncoding:[NSString defaultCStringEncoding]], [myString length]);
我在 CGContextSelectFont 函数中使用 kCGEncodingFontSpecific 编码进行了尝试,但这也不起作用。
出于性能原因,我需要使用 C 函数,而不是 NSString 提供的 drawInRect 函数。
也许你可以帮助我!
PS:我知道这是一个经常出现的话题,但我不明白为什么我无法让它工作......
您所指的“特殊符号”受 NSString 的 Unicode 编码支持,但不支持 Core Graphics 字体绘制例程使用的 MacRoman 编码(您可以使用 CGContextSelectFont() 设置的唯一两种编码是 kCGEncodingMacRoman 和 kCGEncodingFontSpecific)。这是 CGContextShowTextAtPoint() 绘制文本路径的缺点。因此,每当我需要在 Core Graphics 上下文中手动绘制文本时,我都会使用 NSString 的 -drawAtPoint: 方法。
就性能而言,在评论中较早的答案 https://stackoverflow.com/questions/844829/creating-a-custom-text-drawing-view/845433#845433,Kyle 对 drawAtPoint: 进行了基准测试,每秒绘制 75 次,而 CGContextShowTextAtPoint() 每秒绘制 99 次。这在绘制速度上并没有太大的差异,因此通过这种方式您不会获得太多收益。根据我的经验,-drawAtPoint: 对于我的应用程序来说已经足够快了。
编辑(10/14/2009):正如 Sixten Otto 所指出的,我误读了自己的代码。 UTF-8 确实支持完整的字符范围,但字体的 MacRoman 不支持。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)