将NSString转换为cString以与CGContextShowTextAtPoint一起使用

Eri*_*rik 6 iphone core-graphics objective-c

我正在使用CGContextShowTextAtPoint绘制一个String.因此我需要将我想要绘制的NSString转换为c字符串.不幸的是,欧元货币符号等特殊符号未正确显示.

CGContextSelectFont(currentContext, "TrebuchetMS", 15, kCGEncodingMacRoman);

CGContextShowTextAtPoint(currentContext, 0, 0, [myString cStringUsingEncoding:[NSString defaultCStringEncoding]], [myString length]);
Run Code Online (Sandbox Code Playgroud)

我在CGContextSelectFont函数中使用kCGEncodingFontSpecific编码尝试了它,但是它也没有用.

出于性能原因,我需要使用CG函数,而不是NSString提供的drawInRect函数.

也许你可以帮助我!

PS:我知道这是一个经常发布的主题,但我无法弄清楚为什么我不能让它工作......

Bra*_*son 6

您指的"特殊符号"受NSString的Unicode编码支持,但不支持Core Graphics字体绘制例程使用的MacRoman编码(您可以使用CGContextSelectFont()设置的唯一两种编码是kCGEncodingMacRoman和kCGEncodingFontSpecific).这是绘制文本的CGContextShowTextAtPoint()路线的缺点.因此,每当我需要在Core Graphics上下文中手动绘制文本时,我都会使用NSString的-drawAtPoint:方法.

就性能而言,在对早期答案的评论中,Kyle已经对drawAtPoint进行了基准测试:每秒绘制75次,而CGContextShowTextAtPoint()每秒绘制99次.这并不是绘制速度的巨大差异,所以你不会通过这种方式获得很多.根据我的经验,-drawAtPoint:对我的应用来说已经足够快了.

编辑(10/14/2009):正如Sixten Otto指出的那样,我误解了自己的代码.UTF-8支持完整的字符范围,字体的MacRoman不支持.