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

2024-01-31

我正在使用 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(使用前将#替换为@)

将 NSString 转换为 cString 以与 CGContextShowTextAtPoint 一起使用 的相关文章

  • 在 swrevealcontroller 之前实现登录屏幕

    我刚刚开始学习 IOS 开发 我已经按照给定的在线教程成功实现了 SWRevealViewController 一切都按预期工作 然后 我决定添加一个登录屏幕 这将是应用程序运行时用户看到的第一个页面 我采取的步骤如下 将 UIViewCo
  • 使用 iPhone 摄像头检测心率 [重复]

    这个问题在这里已经有答案了 可能的重复 使用摄像头检测心率 https stackoverflow com questions 9274027 detecting heart rate using the camera 我正在研究 iOS
  • CBPeripheral 名称有时为 null

    我正在开发一个应用程序来与蓝牙 LE 外围设备进行通信 我目前正在测试的外围设备是其中之一these http www ti com tool cc2540dk mini 有趣的是 有时当我发现它时 我会得到它的正确名称 SimpleBLE
  • 如何在 ios 7 上更改重新排序控制图像

    我正在寻找一种更改重新排序控件图像和大小的方法 我使用此代码来更改重新排序图像 void tableView UITableView tableView willDisplayCell UITableViewCell cell forRow
  • 如何在 UICollectionView 的节标题中动态添加标签和按钮?

    请帮助我如何水平添加标签和水平添加类似的按钮 但每个按钮应像另一个部分一样在每个标签的下方对齐 这应该在 UICollectionView 的标题中动态发生 因为标签和按钮的数量根据我的数据 我想制作一种 Excel 类型的布局 并在标题中
  • 有什么方法可以让我知道按屏幕的力度有多大

    我想找到触摸的压力 我只是不知道如何在不越狱并获取原始触摸数据的情况下实现该结果 有谁知道我会怎么做 你无法获得来自SDK的压力nor未记录的方法 然而你can使用未记录的方法检测触摸的大小 在 GSEvent UIEvent 的较低级别表
  • 如何确定iPhone铃声的当前级别?

    我正在使用 AVSystemController 将 iPhone 铃声静音 但我不知道如何确定铃声的当前级别 有任何想法吗 PS 是的 我知道使用 AVSystemController 可能会导致应用程序被 App Store 禁止 这不
  • 用 UIView 像翻书一样翻页?

    我正在尝试在之间切换UIViews让它看起来就像你正在翻书的一页 The UIViewAnimationTransitionCurlUp如果我能让它向左或向右卷曲 那就非常接近了 这可能吗 我尝试过使用CATRansition但没有一种动画
  • 如何在 Apple Watch Extension/App 和 iOS App 之间建立通信通道

    我正在探索 WatchKit SDK 当我有 WatchKit 应用程序时 是否可以在 WatchKit 应用程序上从 iPhone 应用程序设置值 例如文本 设置 我可以从 iPhone 应用程序调用 WatchKit 应用程序扩展中的函
  • 使用超类初始化器初始化类

    我有两个类 一个是另一个的子类 比如说Animal and Dog 超类有一些初始化器 比如initAnimal 子类有一些初始化器 比如initDog 问题是 从编译器的角度来看 做类似的事情是完全合法的Dog adog Dog allo
  • 确定 NSView 是否绘制的正确方法

    有没有正确的方法来确定是否NSView实际上是否在当前视图层次结构中绘制 考虑以下情况 视图完全在屏幕外 不是强制性的 该视图不在视图层次结构的顶部 The isHidden and isHiddenOrHasHiddenAncestor不
  • 使用 Cocoa 获取无法安装的驱动器列表

    我想获取在 OS X 下使用 Cocoa Objective C 无法安装 弹出的驱动器列表 我希望 NSWorkspace getFileSystemInfoForPath 能帮助我 NSArray listOfMedia NSWorks
  • PresentModalViewController 不执行任何操作

    我有一个 UIViewController parent 调用presentModalViewController与另一个 UIViewController child on viewDidLoad If parent没有 UINaviga
  • 沿着预定路径移动图像?

    是否可以通过按下 iphone SDK 中的按钮来将图像设置为沿着预定路径运动 我不是在寻找任何奇特的东西 我正在研究一个简单的概念 但这会节省大量动画工作 是的 您可以通过创建一个路径来为任何 CALayer 制作动画CAKeyframe
  • 您将如何实现一个检测水平滑动以允许分页的 UITableView?

    我想实现一个 UITableView 一次显示 20 行 但考虑到我实际上可能要展示 120 个项目 我想使用某种分页来处理这个问题 使用前 20 项填充表 当用户从右向左滑动时 用接下来的 20 个项目重新加载 UITableView 从
  • 使用 Google place API 从 lat long 获取附近的地点

    我正在使用 google place API 即 https maps googleapis com maps api place search json location 33 7167 73 0667 radius 500 type f
  • 线程 1:信号 SIGABRT - AppDelegate.h

    main m Journey Created by Julian Buscema on 2014 07 13 Copyright c 2014 Julian Buscema All rights reserved import
  • Objective C 如何将文本字段添加到导航栏中

    我正在尝试将文本字段添加到导航栏中 但它没有显示在模拟器中 我在 viewdidload 中按如下方式执行 UITextView textField UITextView alloc initWithFrame CGRectMake 0 0
  • 我可以知道 requireGestureRecognizerToFail 到底会做什么吗?

    谁能告诉我下面的代码行到底会做什么 我已经提到过Apples https developer apple com library ios documentation uikit reference UIGestureRecognizer C
  • 对使用phonegap和钛的质疑[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 最近我听说了 PhoneGap 和 Titanium 移动网络应用程序的开发 我分析了这两个 Web 应用程序 并了解了如何使用它们以

随机推荐

  • 预授权不起作用

    我正在编写一个套接字服务器 无 Web 应用程序 应用程序 并希望使用基于方法的安全性来处理我的 ACL 需求 我按照我发现的一个小教程进行操作春季安全举例 http blog solidcraft eu 2011 03 spring se
  • 为什么我不能使用“scanf_s”同时读取字符和数字?

    这段代码崩溃了 scanf s c d ch x Run error 但这段代码有效 scanf s c ch scanf s d x Run succeed 我想知道为什么第一个代码片段是错误的 运行错误 的意思是 当我运行程序输入时 编
  • 返回 false 不停止表单提交

    我很确定这应该不会那么难 我有一个在提交时运行以下函数的表单 function FORMVALIDATE add rota entry var rota date rota date val var rota id rota id val
  • 自定义 Slack 机器人无法连接

    我一直在尝试制作一个 Slack 机器人 它可以回复简单的查询并做一些简单的事情来帮助办公室工作 该机器人工作正常 只是似乎无法从我们的代理后面连接到 Slack 当我从自己的移动互联网连接测试它时 它工作正常 但是当尝试在代理后面运行它时
  • Android 此功能需要 ASM7

    可能重复 https stackoverflow com questions 68709559 nestmember requires asm7 noredirect 1 我已将 Android Studio 更新为 Android Stu
  • 使用 automake 安装包含大量文件的数据目录树

    我有一个数据目录 我希望 automake 为其生成安装和卸载目标 本质上 我只想将此目录逐字复制到 DATA 目录 通常 我可能会单独列出所有文件 例如 dist whatever DATA dir subdir filea 但是当我的目
  • 如何在 spring Restapi 的 json 请求中的未知字段上抛出错误

    我有一个 spring Rest api 它获取 json 数据并绑定到 pojo GetData 每当我收到未知字段时 它都不会失败或抛出任何异常 我的要求是当它接收到 json 数据中的未知字段时应该抛出错误 public Respon
  • 如何实现 ILogger 将消息发送到 SignalR Hub?

    我想构建一个显示最新日志消息的 LogView 所以我构建了一个非常简单的设置 但在依赖注入方面失败了 这是我的实施尝试 我跳过了非关键部分 public class SignalRLogger ILogger private readon
  • 使用 Java 删除 JIRA 中的问题

    我正在尝试编写一种方法来删除 JIRA 中的问题 我已经有了创建和更新问题的方法 但我找不到任何有关如何使用 Java 删除问题的文档 如何从 Java 应用程序中删除 JIRA 问题 您可以尝试从 IssueService 中删除 htt
  • 如何限制谁可以 iframe 嵌入我的网络应用程序?

    限制 Web 应用程序可以嵌入 iframe 的网站的最佳 最安全 方法是什么 例如 所有不在名单上的人都应该被拒绝 www myFriend com www anotherfriend com www myThirdFriend com
  • 我应该使用什么类型来表示 C 枚举的二进制?

    据我所知 C 枚举是无符号整数 但这可能因实现而异 我应该为二进制表示形式的枚举使用什么类型 附注 二进制表示 是指字节数组 我想将枚举值序列化到套接字以与其他程序进行互操作 由编译器决定是否使用int代表一个enum类型 或一个long
  • Quartz.NET 服务器文档

    下载 Quartz NET 时 它包含一个带有控制台应用程序的服务器组件 网站 常见问题解答和 API 文档没有提及任何相关内容 有人知道更多关于它的信息或者知道我在哪里可以找到更多关于它的文档吗 谢谢 帕特里克 那么你可以加入Quartz
  • 在哪里可以找到使用 C# /// xml 文档注释的好示例? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找 NET XML 样式源代码注释和所有可用的各种标签的一些很好的示例 我在哪里可以找到一些好的
  • 如何使用 Windows + WSL2 在 Pycharm 中配置 Poetry 环境?

    TL DR 无法使用 WSL 中的现有 Poetry 环境在 PyCharm Windows 上配置 Python 解释器 当尝试设置 Poetry 环境路径时Add Python Interpreter gt Poetry Environ
  • GAE:使用 testbed 和 webtest 测试 blob 的下载

    我将 blobstore 与我的 Google App Engine 应用程序一起使用 并且在生产服务器和开发服务器上一切正常 使用测试台进行测试和webtest http webtest pythonpaste org 但是 不起作用 在
  • 检查 Discord 机器人是否在线

    我试图做到这一点 以便我的机器人一次只能连接到 Discord 而另一个仅在另一个未连接时才连接 我怎样才能做到这一点 我在用着不和谐 py https pypi org project discord py 另外 如果可能的话 我希望它能
  • 创建和使用带有代理对的字符串

    我必须使用上面的代码点0FFFF 特别是数学脚本字符 并且尚未找到有关如何执行此操作的简单教程 我希望能够 a 创建Strings 具有高代码点 并且 b 迭代其中的字符 自从char不能保留这些点我的代码如下所示 Test public
  • Colorbox 中的 CKEditor 加载不起作用 [ Google Chrome ]

    我在我的项目中使用 Colorbox 我已将 CKEditor 集成到 colorbox 中 它在所有浏览器中工作正常 但在 Google Chrome 中存在一个小问题 编辑器将在第一次单击时正确打开 关闭弹出窗口并在不加载页面的情况下第
  • 从插入触发器后调用存储过程

    也许是一个愚蠢的问题 如果我从插入后触发器 T SQL 调用存储过程 那么如何获取 刚刚插入 数据的值 例如 CREATE TRIGGER dbo MyTrigger ON dbo MyTable AFTER INSERT AS BEGIN
  • 将 NSString 转换为 cString 以与 CGContextShowTextAtPoint 一起使用

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