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

标签 iphone objective-c core-graphics

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

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

CGContextShowTextAtPoint(currentContext, 0, 0, [myString cStringUsingEncoding:[NSString defaultCStringEncoding]], [myString length]);

我在 CGContextSelectFont 函数中使用 kCGEncodingFontSpecific 编码进行了尝试,但这也不起作用。

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

也许你能帮帮我!

PS:我知道这是一个经常发布的话题,但我不明白为什么我不能让它工作......

最佳答案

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

就性能而言,在对 an earlier answer 的评论中, Kyle 对 drawAtPoint: 进行了基准测试,每秒绘制 75 次,而 CGContextShowTextAtPoint() 每秒绘制 99 次。这在绘制速度上并没有太大的区别,所以你通过这种方式并没有得到太多。根据我的经验,-drawAtPoint: 对于我的应用程序来说已经足够快了。

编辑(2009 年 10 月 14 日):正如 Sixten Otto 所指出的,我误读了自己的代码。 UTF-8 确实支持完整的字符范围,字体的 MacRoman 不支持。

关于iphone - 将 NSString 转换为 cString 以与 CGContextShowTextAtPoint 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1564577/

相关文章:

ios - 如何将带有枚举键的 Swift 字典转换为 NSDictionary?

iphone - 我必须在哪里声明静态变量?

ios - 如何在 Swift 中将图像转换为渐进式 JPEG?

ios - 有人可以解释 CGRectGetMaxX 和 CGRectIntersection 的结果吗?

IOS - 无法在应用程序的根目录加载图像

iphone - 从 UIWebView 获取内容长度

iphone - 应用程序更新时缓存目录是否会被清空/删除?

objective-c - 如何观察 UITabBar 是否隐藏的事件?

ios - 当部分没有行时确定 UITableView 的可见部分

objective-c - 在 iOS 的 Core Graphics 中处理非常大的图像